zoukankan      html  css  js  c++  java
  • Android9.0动态运行时权限源码分析及封装改造<二>-----权限检测requestPermissions源码分析

    校验requestcode是否合法:

    继续接着上一次https://www.cnblogs.com/webor2006/p/12757460.html的权限申请框架源码进行分析,这一次则需要分析最最核心的API了:

    这块稍复杂一些,慢慢来,不着急:

    所以此条件是满足的,看一下它里面做了啥?

    Activity.requestPermissions():

    继续往下:

     

    这个目前咱们还木有重写过,所以先放一放,先继续往下分析着,回头再来分析它:

    那咱们来看一下构建这个Intent的细节:

     

    那怎么来验证这一点呢?其实我们可以运行用adb dump一下Activity的信息就能验证出来,下面来试一下,先在manifest中添加访问SDcard的权限:

    然后再运行一下:

     

    此时来看一下这个权限弹窗是不是一个Activity,如下:

    此时会输出一大堆东西,在最后可以看到相关Activity的信息,如下:

    确实是的,那咱们瞅一下这个Activity源码,上AndroidXRef上看一下:

    分析GrantPermissionsActivity授权界面的逻辑:

    看一下onCreate()的逻辑:

    记得这里设置了一个监听回调,在下面的分析中会要用到的:

    而最终UI的显示也是封装在GrantPermissionsViewHandlerImpl中的,如下:

    咱们重点来分析一下授权的逻辑,当然我们得点击界面的“始终允许”按钮,所以看一下点击事件的逻辑:

    此时则回到Activity中来:

    PackageManager.grantRuntimePermission():

    接下来就可以回到Android Studio中来查看进一步的授权细节了:

    找具体实现类:

    此时又有IBinder通讯了,到PackageManagerService中来查找一下:

    而它又往里调用了,注意这里有一个回调,最终结果的处理都会回到这个回调里面来分析的:

     

    继续往里跟进去:

    然后分析关键代码,此时就会到这:

     

     

    好,回到主流程继续:

    此时则回到上面提到的回调中来看一下回调处理:

    其实也就是写到配置文件当中了,这里就不细分析了,再回到授权的主界面来,此时就会执行到这了:

     

    onRequestPermissionsResult()回调处理:

    此时授权界面就消失了,接下来则会回到执行我们界面的Activity.onResume()方法,而底层最终会执行到这:

    然后跟进去:

    其中REQUEST_PERMISSIONS_WHO_PREFIX还记得是在哪传递的么?就是在我们申请权限时传递的,回忆一下:

    所以看一下这块的逻辑:

     

    此时咱们就可以在咱们自己的Activity重写这个方法处理授权逻辑了:

    至此整个申请授权的主流程就分析完了,还是很多细节的。

    总结:

    最后用图来总结一下整体授权的流程:

  • 相关阅读:
    AJAX删除事件与加载数据
    AJAX的基本操作
    用JavaScript写弹窗
    jQuery事件和JSON点语法
    jQuery
    jQuery基础知识
    php 实现简单购物车功能(2)
    css实现3D立方体旋转特效
    for循环与foreach的区别
    微信小程序开发2 双线程模型,小程序中app.js中的生命周期,小程序的页面的生命周期,小程序的事件,事件补充(事件的冒泡,捕获)
  • 原文地址:https://www.cnblogs.com/webor2006/p/13269742.html
Copyright © 2011-2022 走看看