Android 权限

在开发Android应用的时候,我们常需要在AndroidManifest.xml 中添加一些权限。才能完成对应的功能。如调用电话簿,让手机震动等等。

那么什么是权限呢?

  其实权限一种应用程序级的安全机制,他可以限制对应用程序组件的访问。权限可以组织对应用程序的恶意破坏,来限制对敏感信息,硬件资源或者外部通信信道的过度使用。总之就是让你的应用程序更加安全,合理。

 

在AndroidManifest.xml我们常常使用两种标签来添加权限。“<permission/>”和“<uses-permission/>”这两个权限标签有什么区别么?

 

 

permission 

 

<permission/>标签:添加自定义权限,防止其他应用程序随意访问你的数据或者代码接口等。如果想访问你的应用程序的接口或者数据等,就必须在他的代码中使用<uses-permission/>来添加你自己定义的权限。才可以方位你的应用程序。

简单说就是告诉其他程序,必须有你自定义权限,才可以访问你的应用程序的接口或者数据等;

 

用途:例如你的应用对外提供了数据或者接口等,但你并不想让所有应用程序访问,这时候你就可以使用<permission/>来指定权限啦。其他应用必须含有你自定义的权限,才可以访问你的程序。

 

 

代码:

<permission 

android:description="@stirng/my_permission" android:icon="drawable resource" android:label="我自定义权限" android:name="权限的名字string类型的值" android:permissionGroup="权限所属的分组string类型的值" android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"]

/>

 

android:name :属性是必须的,其他的可选,未写的系统会指定默认值

android:description :权限的详细描述,比lable长,一般是两句话,第一句话描述这个权限所针对的操作,第二句话告诉用户授予app这个权限会带来的后果,这个值必须从resource中读取。

例如这里是:@stirng/my_permission

android:label:对权限的简短描述,显示给用户看的,值可是一个string数据,例如这里的“我自定义权限”。

android:name :权限的名字,这个值必须是唯一的,否则会造成权限冲突。最好使用“包名”+“权限名”或者其他有意义的组合,其他app想要访问你的应用程序需要添加这个名字的权限。

android:permissionGroup: 权限所属权限组的名称

android:protectionLevel:权限的级别,分为4个级别:

(1)normal:低风险权限,在安装的时候,系统会自动授予权限给app,不会提示用户。

(2)dangerous:对应的操作有安全风险,系统在安装声明此类权限的app时会提示用户

(3)signature:签名权限,只针对使用同一个证书签名的app开放

(4)signatureOrSystem :引用该权限的app需要有和系统同样的签名才能授予的权限,一般不推荐使用。

 

如果想调用上面应用程序里的数据代码接口等。就需要在自己的AndroidManifest.xml中使用uses-permission添加上面定义的权限:

 

uses-permission 


<uses-permission/>标签:给应用程序添加权限的时候使用。如你访问手机的震动器,NFC等功能。就需要使用这个标签来添加权限。或者你想访问其他应用程序的时候,你就要使用这个标签来添加对方自定义的权限支持。

 

例如让手机震动权限:

<uses-permission android:name="android.permission.VIBRATE"/>

android:name 权限名字

 

 

关于组件使用权限:

 

Activity:添加一个权限来限制其他应app来启动此Activity。

BroadcastReceiver:控制哪些app可以向你的接收器发送消息。

intent:筛选哪些BroadcastReceiver可以接收Broadcast Intent。

Service:限制其他app启动或者绑定此Service。

content provider:限制其他app对content provider的读取,写入操作的权限

 

Activity:

<activity android:name=".MyAcitivity"

android:lable="@string/app_name"

android:permission="com.test.my_device"/>

 

Service:

<Service android:name=".MyService" android:permission="com.test.my_device"/>

 

Receiver:

<receiver android:name=".MyReceiver" android:permission="com.test.my_device">

<intent-filter>

<action android:name="com.test.my_device"/>

</intent-filter>

</receiver

 

Provider

可以通过设置 writepermission 和 readpermission可以增加细粒度更高的 读 写 权限控制

<provider android:name=".MyProvider"
android:authorities="com.test.myprovider"
android:writePermission="com.test.wirte_dervice"
android:readPermission="com.test.read_dervice""/>

 

posted @ 2014-08-01 13:38  仰望 星空  阅读(449)  评论(0编辑  收藏  举报