Android(安卓)Notes 之 权限管理
我的GitPage博客
前言
本文主要讲述Android中权限的管理。
这里首先将三个permission
1. uses-permission
:指的是应用具有的权限,比如android.permission.INTERNET
2. permission
:开发者自定义的权限,比如某个App中的一个Service或是一个Activity不允许不具备权限的App启动的话,就可以为该Service或是Activity设置权限
3. android:permission
:这是为Activity或者是Service设置的权限
添加权限
代码中添加权限检查
在代码中调用context.checkCallingOrSelfPermission(SAY_HELLO_PERMISSION)
检查权限,返回值有两种,PackageManager.PERMISSION_GRANTED
和PackageManager.PERMISSION_DENY
,前者表示具备权限,后者反之。在具备权限的情况下才能够调用sayHello
方法。
public static final String SAY_HELLO_PERMISSION="com.android.tongs.checkpermissionincode.permission.SAY_HELLO_PERMISSION"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.startMyAty).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this,MyAty.class)); } }); sayHello(this); } public void sayHello(Context context){ int checkResult = context.checkCallingOrSelfPermission(SAY_HELLO_PERMISSION); if(checkResult!= PackageManager.PERMISSION_GRANTED){ throw new SecurityException("请检查sayHello权限"); } System.out.println("Hello"); }
此时要在AndroidManifest
文件中对权限进行声明,不声明会抛出SecurityException
异常。
<!-- 对自定义的权限进行声明 --><permission android:name="com.android.tongs.checkpermissionincode.permission.SAY_HELLO_PERMISSION" /><!-- 声明本APP具有此权限 --><uses-permission android:name="com.android.tongs.checkpermissionincode.permission.SAY_HELLO_PERMISSION" />
为App的Activity添加权限
为Activity添加权限
<activity android:name=".MyAty" android:permission="com.android.tongs.checkpermissionincode.permission.Start_MyAty"> <intent-filter> <category android:name="android.intent.category.DEFAULT"/> <action android:name="com.android.tongs.checkpermissionincode.intent.action.MyAty"/> </intent-filter></activity>
在AndroidManifest
文件中声明此自定义的权限
<permission android:name="com.android.tongs.checkpermissionincode.permission.Start_MyAty" />
此时必须在另一个App中声明具有此权限
<!--声明权限,以访问另一个App中的MyAty--><uses-permission android:name="com.android.tongs.checkpermissionincode.permission.Start_MyAty"/>
最后在另一个App中启动MyAty的方法是:
startActivity(new Intent("com.android.tongs.checkpermissionincode.intent.action.MyAty"));
坑
在一个应用中启动另一个应用中的Activity的另一种方法,配置Intent-Filter
,添加默认category
,添加action
为com.android.tongs.checkpermissionincode.intent.action.MyAty
.必须为包名+intent+action+类名,不然找不到此action。
总结
- 为了对权限进行更好的管理,同一个程序之间内的方法有时候也会设置权限,此时就要自定义一个权限出来,并在
AndroidManifest
文件中声明。 - 同一个App中启动Service或者是Activity不需要权限,即使给改Activity设置了权限,仍然可以访问。
- 不同的App之间为Activity设置权限,另外的App想要访问的话必须声明权限。
更多相关文章
- Android启动另一个App的Service
- 大数据和Android
- Android系列之Fragment(一)----Fragment加载到Activity当中
- Android(安卓)-- RecyclerView实现顶部吸附效果
- 安卓向SD卡存储数据时java.io.FileNotFoundException:(Permissio
- Android(安卓)面试题之系统相关
- Android(安卓)7.1 导航栏增加按键, 关机菜单增加休眠选项
- 让Android应用程序申请获取ROOT权限
- 为Android应用程序添加社会化分享功能