深入浅析Android动态权限的机制-创新互联

本篇文章给大家分享的是有关深入浅析Android动态权限的机制,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

公司主营业务:成都网站建设、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联推出丰顺免费做网站回馈大家。

Android6.0以后引入了动态权限机制,一些系统权限的分配需要在app运行中进行分配,而不只是在AndroidManifest中指定。

本篇将针对动态权限的底层分配过程进行分析(基于Android-6.0.1)。

权限分配

我们先看一下请求分配权限的代码

//frameworks/support/v4/java/android/support/v4/app/ActivityCompat.java
public static void requestPermissions(final @NonNull Activity activity,
  final @NonNull String[] permissions, final int requestCode) {
 if (Build.VERSION.SDK_INT >= 23) {//对于Android M 以及以上的权限的分配
  ActivityCompatApi23.requestPermissions(activity, permissions, requestCode);
 } else if (activity instanceof OnRequestPermissionsResultCallback) {//Android M以下的权限分配
  Handler handler = new Handler(Looper.getMainLooper());
  handler.post(new Runnable() {
   @Override
   public void run() {
    //请求分配的权限结果,如分配就是PERMISSION_GRANTED
    final int[] grantResults = new int[permissions.length];
    
    PackageManager packageManager = activity.getPackageManager();
    String packageName = activity.getPackageName();

    final int permissionCount = permissions.length;
    //通过包管理的checkPermission来检验是否分配权限
    for (int i = 0; i < permissionCount; i++) {
     grantResults[i] = packageManager.checkPermission(
       permissions[i], packageName);
    }

    ((OnRequestPermissionsResultCallback) activity).onRequestPermissionsResult(
      requestCode, permissions, grantResults);
   }
  });
 }
}

分享文章:深入浅析Android动态权限的机制-创新互联
URL分享:http://cdiso.cn/article/diisoo.html

其他资讯