android 中我们可以在Manifest文件中定义自己的权限
uses-permission标签用于向Android 系统申请权限
permission标签用于在Android 系统中注册新权限
<--用permission标签注册一个权限-->
<permission
android:name="paul.permission.TEST"
android:description="@string/permdesc_deadlyActivity"
android:permissionGroup="paul.permission-group.TEST"
android:protectionLevel="signature" />
相关属性:
android:label:权限名字,显示给用户的,值可是一个 string 数据,例如这里的“自定义权限”。
android:description:比 label 更长的对权限的描述。值是通过 resource 文件中获取的,不能直接写 string 值。
android:name:权限名字,如果其他 app 引用该权限需要填写这个名字。
android:protectionLevel:权限级别,分为 4 个级别:
normal:低风险权限,在安装的时候,系统会自动授予权限给 application。
dangerous:高风险权限,系统不会自动授予权限给 app,在用到的时候,会给用户提示。
signature:签名权限,在其他 app 引用声明的权限的时候,需要保证两个 app 的签名一致。这样系统就会自动授予权限给第三方 app,而不提示给用户。
signatureOrSystem:这个权限是引用该权限的 app 需要有和系统同样的签名才能授予的权限,一般不推荐使用。
给一个Activity添加权限
我们知道,Android允许一个应用(客户端)调用另一个应用(服务端)的组件。那么作为服务端的应用就得暴露相应的组件,客户端应用才能访问。当然,在暴露的时候,权限是非必须的,如果暴露的组件没有权限的话,那么任何的其他应用都可以来调用该组件;如果该组件申请了权限,那么只有拥有该权限的应用才能调用该组件。
如果没个应用都可以调用我们的组件的话,显然是不安全的,我们希望只有使用了我们的权限的应用,才能调用我们暴露的组件,我们可以在activity中加入permission属性。
<activity
android:name=".PrivateActivity"
android:exported="true"
android:label="@string/title_activity_private"
android:permission="paul.permission.TEST" />
如何在另个应用中调用
我们要在另一个应用中调用,第一要申请这个权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.zlp.clientapplicant">
<uses-permission android:name="paul.permission.TEST" />
...
</manifest>
然后隐试调用
Intent intent = new Intent();
intent.setClassName("com.example.zlp.myapplication", "com.example.zlp.myapplication.PrivateActivity");
startActivity(intent);
就如同调用电话权限一样(安全性)
http://blog.sina.com.cn/s/blog_49f4857001011pu5.html