App Manifest详解
权限
权限是对设备上一部分代码或数据的访问限制。施加权限去保护重要代码和数据不被乱用,以伤害用户体验。
每一个权限使用唯一的标签定义。通常,标签指明了限制的行为,如下面这些Android定义的权限:
android.permission.CALL_EMERGENCY_NUMBERS
android.permission.READ_OWNER_DATA
android.permission.SET_WALLPAPER
android.permission.DEVICE_POWER
一个特征最多被一个权限保护。
如果应用程序要访问一个受权限保护的特征,它必须在manifest中用<uses-permission>
元素声明它所需要的权限。当应用被安装在设备上时,安装器通过检查被应用程序证书签名的权限来决定是否授予请求的权限,很多情况下,会直接询问用户是否授予该权限。一旦权限被授予,该应用程序就可以使用这个受保护的特征了。如果没有授予,它尝试访问这些权限都会失败,而不会给用户任何通知。
应用程序可以使用权限保护它自己的组件(activities, services, broadcast receivers, and content providers),它可以使用任何Android定义的(被列在android.Manifest.permission)或被其他应用程序声明的权限。
应用程序可以定义自己的权限,新的权限使用<permission>
素声明。例如,一个activity可以像下面一样被保护:
<manifest . . . >
<permission android:name="com.example.project.DEBIT_ACCT" . . . />
<uses-permission android:name="com.example.project.DEBIT_ACCT" />
. . .
<application . . .>
<activity android:name="com.example.project.FreneticActivity"
android:permission="com.example.project.DEBIT_ACCT"
. . . >
. . .
</activity>
</application>
</manifest>
注意,在这个示例中,DEBIT_ACCT
权限不仅需要使用<permission>
元素声明,还需要使用<uses-permission>
元素请求权限。为了该应用程序的其他组件能够建立这个受保护的activity,该权限必须被请求,尽管这个保护已经被应用程序自身所使用。
如果为权限属性设置的权限已在某个位置声明过(如android.permission.CALL_EMERGENCY_NUMBERS
),则没有必要用<permission>
元素再次对其进行声明。但,仍然必须用<uses-permission>
请求这个权限。
<permission-tree>
为将要被定义在代码中的一组权限声明了一个命名空间。<permission-group>
元素为权限集(所有使用<permission>
元素在manifest中声明或在其他位置声明的权限)定义了一个标签。它仅影响当呈现给用户时,这些权限被怎样组织。<permission-group>
元素不能指定那个权限属于哪个组,它仅给这个组一个名字。通过在<permission>
元素的permissionGroup
属性中指定一个组的名字,来将这个权限放置在这个组中。