一、Android 权限的完整列表, 请访问以下URL
http://developer.android.com/reference/android/Manifest.permission.html
权限具有名称、标签、图标、权限组、描述和保护级别,以下表格定义了这些属性:
特性 | 是否必需 | 说明 |
android:name | √ | 权限的名称,通常应遵循android 命名方案(*.permission.*) |
android:protectionLevel | √ | 定义与权限相关的"风险级别"。必须是以下值之一: normal, dangerous, signature, signatureOrSystem , 取决于保护级别,在确定是否授予权限时,系统可能采取不同的操作。 normal 表示权限是低风险的,不会对系统、用户或其他应用程序造成危害; dangerous 表示权限是高风险的,系统将可能要求用户输入相关信息,才会授予此权限; signature 表示只有当应用程序所用数字签名与声明引权限的应用程序所用数字签名相同时, 才能将权限授给它;signatureOrSystem 表示将权限授给具有相同数字签名的应用程序或android 包类。 这一保护级别适和于非常特殊的情况,比如多个供应商需要通过系统映像共享功能时 |
android:permissionGroup | × | 可以将权限放在一个组中,但对于自定期义权限,应该避免设置此属性。如果确实希望设置此属性, 可能使用以下属性代替:android.permisson-group.SYSTEM_TOOLS |
android:label | × | 可使用它对权限进行简短描述 |
android:description | × | 使用它提供对权限用途和所保护对象的更有用的描述 |
android:icon | × | 权限可以与资源目录以外的图标相关联 ( 比如@drawable/myicon) |
二、 理解与使用自定义权限
android 支持用户自定义权限, 例如: 如果希望阻止某些用户启动应用程序中的某个活动,可以自定义权限来实现,要使用自定义权限,首先在AndroidManifest.xml 文件中声明它们。
以下介绍如何实现这一功能。
1 首先创建一个程序,它包括一个不是所有人都允许启动的活动,要启动该活动,用户必须具有特定的权限,
程序代码 参见 ch10_CustomPermission工程
在程序中创建了一个类PrivActivity, 用于展示如何使用权限保护此活动,然后从客户端调用它
public class PrivActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout view = new LinearLayout(this);
view.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
view.setOrientation(LinearLayout.HORIZONTAL);
TextView nameLbl = new TextView(this);
nameLbl.setText("Hello from PrivActivity");
view.addView(nameLbl);
setContentView(view);
}
}
这里要告诉系统,PrivActivity 活动应该仅由具有syh.permission.STARTMYACTIVITY 权限的应用程序启动,要在活动上设置必须的权限以,可以将android:permission特性添加到AndroidManifest.xml 中的活动定义中, 同时为了能启动活动,还需要添加一个Intent Filter 过滤器,AndroidManifest.xml 文件关键内容如下:
<?xml version="1.0" encoding="utf-8"?>
- - ...
< < activity android:name =" PrivActivity " android:permission =" syh.permission.STARTMYACTIVITY ">
- < intent-filter >
< action android:name =" android.intent.action.MAIN " />
</ intent-filter >
</ activity >
</ application >
< permission android:protectionLevel =" normal " android:label =" Start My Activity " android:description =" @string/startMyActivityDesc " android:name =" syh.permission.STARTMYACTIVITY " />
</ manifest >
先在真机/ 模拟器 运行程序,这样做是为了运行客户端程序前,将此程序提早安装好。
2. 接下来 实现客户端
编写一个Activity 活动ClientCustPermMainActivity 来显示一个按钮,单击此按钮即可调用特权活动, 关键代码如下
public void doClick(View view) {
Intent intent = new Intent();
intent.setClassName("com.cust.perm","com.cust.perm.PrivActivity");
startActivity(intent);
}
另外在客户端的AndroidManifest.xml 中要加上一句:
<uses-permission android:name="syh.permission.STARTMYACTIVITY" /> ,有了该权限才能启动在上一个程序实现的PrivActivity
程序代码 参见ch10_ClientofCustomPermission 工程, 具体过程如图所示:
注意:自定义权限不仅仅用于Activity ,也可用于Service,BroadCastReceiver等类型