对于权限的使用是很简单的,为了保证程序的安全机制,安卓采取了权限制度。比如我们想要访问网络,就需要在Android Manifest声明:
然后在Android Manifest里声明:
然后程序就会检查到我们的权限是存在的。
在这个活动的声明里声明权限
但是会报错,因为没有在清单文件里声明Myatv的权限
就可以成功开启另一个程序的Myatv活动
<uses-permission android:name="android.permission.INTERNER"/>
当我们想要打电话,发短信,拍照等待操作时,都会需要声明权限才能进行。
为代码添加权限检查
比如在一个活动里自定义添加一个权限:
private static final String PERMISSION_SAY_HELLO="demo.com.permissiontest.permission.SAY_HELLO";
然后在Android Manifest里声明:
<permission android:name="demo.com.permissiontest.permission.SAY_HELLO"/>
在代码里检查权限,使用PackageManager的常量PERMISSION.GRANTED,如果我们自定义的权限不存在,就抛出一个SecurityException。当我们没有在Manifest里面声明<uses-permission的话,就会抛出异常
public static void syaHello(Context context){
int checkResult=context.checkCallingOrSelfPermission(PERMISSION_SAY_HELLO);
if (checkResult!= PackageManager.PERMISSION_GRANTED){
throw new SecurityException("需要demo.com.permissiontest.permission.SAY_HELLO权限");
}
System.out.println("Hello Jikexueyuan");
}
我们在Manifest声明:
<uses-permission android:name="demo.com.permissiontest.permission.SAY_HELLO"/>
然后程序就会检查到我们的权限是存在的。
为基本组件添加权限检查
新建活动Myatv,在清单文件里声明
<span style="font-size:14px;"><permission android:name="demo.com.componetpermission.permission.Myatv"/></span>
在这个活动的声明里声明权限
<activity android:name=".Myatv"
android:permission="demo.com.componetpermission.permission.Myatv">
</activity>
然后在MainActivity开启这个活动,我们会发现虽然没有声明<uses-permission/>但是可以成功开启这个活动,因为他们都在一个程序里
我们新建另一个项目,在这个项目里使用action在MainActivity里开启Myatv,先给Myatv声明一下action和category
<activity android:name=".Myatv"
android:permission="demo.com.componetpermission.permission.Myatv">
<intent-filter>
<action android:name="demo.com.componetpermission.intent.action.Myatv" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
然后开启这个活动
startActivity(new Intent("demo.com.componetpermission.intent.action.Myatv"));
但是会报错,因为没有在清单文件里声明Myatv的权限
现在我们声明一下Myatv的权限
<uses-permission android:name="demo.com.componetpermission.permission.Myatv"/>
就可以成功开启另一个程序的Myatv活动