Chinaunix首页 | 论坛 | 博客
  • 博客访问: 389007
  • 博文数量: 120
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 741
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-27 18:15
文章分类

全部博文(120)

文章存档

2016年(13)

2015年(41)

2014年(66)

我的朋友

分类: Android平台

2014-10-15 17:15:10

    点击浅谈permission和uses-permission进入。
    针对permission的使用进行一些补充说明,部分内容来自于网络:
    从launcher2的AndroidManifest.xml可以看出,launcher2注册了activity、receiver、provider。下面针对receiver、provider、service组件的permission属性进行简要说明:
1、service的android:permission
    这个属性定义了要启动或绑定服务的实体必须要有的权限。如果调用者的startService()、bindService()和stopService()方法没有被授予这个权限,那么这些方法就不会工作,并且Intent对象也不会发送给改服务。
如果这个属性没被设置,那么通过元素的permission属性所设定的权限就会适用于该服务。如果元素也没有设置权限,则该服务不受权限保护。
2、receiver的android:permission
    这个属性用于定义把消息发送给该广播接收器的广播器所必须要有的权限。如果没有设置这个属性,那么元素的permission属性所设置的权限就适用于这个广播接收器。如果元素也没有设置权限,那么该接收器就不受权限的保护。
3、provider的权限
3.1 provider的android:grantUriPermission
    这个属性用于设定那些对内容提供的数据没有访问权限的访问者,是否能够被授予访问的权限,这个权限是临时性的,它会克服由readPermission、writePermission和permission属性的设置限制。如果这个属性设置为true,那么权限就可以授予访问者,否则不会授予没有访问权限的访问者。如果设置为true,则权限可以临时被授予内容提供器的任何数据。如果设置为false,则权限只能被授予子元素中所列出的数据子集。默认值是false。
    这种授权是应用程序提供了一种 一次性访问 被权限所保护的数据 的方法。例如,当一个e-mail包含了一个附件时,mail应用程序就可以调用适当的浏览器来打开附件,即使这个浏览器没有查看所有内容提供器数据的权限。在这样的场景中,权限是通过激活组件的Intent对象中的FLAG_GRANT_READ_URI_PERMISSION和FLAG_GRANT_WRITE_URI_PERMISSION标记来授予的。例如,mail应用程序可以把FLAG_GRANT_READ_URI_PERMISSION标记放到传递给Context.startActivity()方法的Intent参数中。这样权限就被授予了Intent对象中所指定的URI。
    如果要启用这个功能,既可以通过把这个属性设置为true来完成,也可以通过定义子元素来实现,在切换URI时,必须调用Context.revokeUriPermission()方法从提供器把权限删除。
3.2 provider的android:permission
    这个属性用于设定客户端在读写内容提供器的数据时必须要有的权限的名称这个属性为同时设置读写权限提供了一种便利的方法。但是readPermission和writePermission属性的优先级要比这个属性高。如果readPermission属性也被设置了,那么它就会控制对内容提供器的查询访问。如果writePermission属性被设置,它就会控制对内容提供器数据的修改访问。
3.3 provider的android:readPermission
    这个属性用于设置查询内容提供器的数据时,客户端所必须要有的权限。从上一博文可以看出,其中一个application的uses-permission里面包含了com.android.launcher.permission.READ_SETTINGS和com.android.launcher.permission.WRITE_SETTINGS,为什么呢,因为在该manifest.xml文件里定义了provider,见代码:

   
             android:name="com.android.launcher2.LauncherProvider"
        android:authorities="com.android.launcher2.settings"
        android:exported="true"
        android:writePermission="com.android.launcher.permission.WRITE_SETTINGS"
        android:readPermission="com.android.launcher.permission.READ_SETTINGS" />
    应用程序需要访问这个provider,所以需要包含上述两个权限。
3.4 provider的android:writePermission
    这个属性用于设置修改内容提供器的数据时,客户端所必须要有的权限

阅读(886) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~