我的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_GRANTEDPackageManager.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,添加actioncom.android.tongs.checkpermissionincode.intent.action.MyAty.必须为包名+intent+action+类名,不然找不到此action。

总结

  1. 为了对权限进行更好的管理,同一个程序之间内的方法有时候也会设置权限,此时就要自定义一个权限出来,并在AndroidManifest文件中声明。
  2. 同一个App中启动Service或者是Activity不需要权限,即使给改Activity设置了权限,仍然可以访问。
  3. 不同的App之间为Activity设置权限,另外的App想要访问的话必须声明权限。

更多相关文章

  1. Android启动另一个App的Service
  2. 大数据和Android
  3. Android系列之Fragment(一)----Fragment加载到Activity当中
  4. Android(安卓)-- RecyclerView实现顶部吸附效果
  5. 安卓向SD卡存储数据时java.io.FileNotFoundException:(Permissio
  6. Android(安卓)面试题之系统相关
  7. Android(安卓)7.1 导航栏增加按键, 关机菜单增加休眠选项
  8. 让Android应用程序申请获取ROOT权限
  9. 为Android应用程序添加社会化分享功能

随机推荐

  1. 小白如何入门Mybatis?这里有答案
  2. 【4.5-4.11】上周精彩回顾
  3. hbase 学习
  4. 邮件加密的第三道坎是密钥管理
  5. 前端js是什么意思?
  6. Photoshop Elements:做出完美大合照,让笑容
  7. 我用注解实现了优雅的跨库查询,架构师竖起
  8. NA(Nirvana)公链“为应用而生” NAC公链
  9. Vsftpd虚拟用户登录
  10. 设计模式3之抽象工厂模式