6.0Android知识Android开发

2017-3-8(Android6.0动态权限)

2017-03-08  本文已影响380人  721d739b6619

在android6.0机器中会出现某些权限需要动态添加,不然会导致闪退或点击没有反映的情况。本人在开发过程中就出现过这样的报错信息:

java.lang.SecurityException: getDeviceId: Neither user xxxxx nor current process hasAndroid.permission.READ_PHONE_STATE.

就是在三星的6.0机子,但在测试过程中,发现不是所有6.0或6.0以上的机子都会出现这样的情况。好吧,出现状况就要修复bug。

网上搜索了一下资料发现:

使用Android Studio编译项目的时候将app/build.gradle中的defaultConfig设置中的targetSdkVersion设置为了23, 这样 Android Studio在编译的时候会使用 Android 23 API即Android 6.0来编译项目,但是,如果你没有给项目加上动态权限请求的话,你的应用在安装到手机的时候将不会获取任何权限!!!可以去查看应用的应用信息,其中的Permissions权限列表中所有的权限组都是关闭状态。

这是别人家博客的原话,出处:blog.csdn.net/zhufuing/article/details/51217969

这个博客也说了解决方案:其一是用23一下编译,目标编译版本更改为23以下。其二是动态添加权限。

第一种方法我没有尝试过,由于我这个项目是ionic混搭项目,里面有些地方要求需要到6.0的版本,所以我使用了第二种解决方案即动态添加权限;

另外哪些属于需要动态添加的权限哪些不需要,鸿翔大神的博客说得十分清楚,这里贴个链接出来:blog.csdn.net/lmj623565791/article/details/50709663

下面是我自己封装了动态添加权限的代码,主要参考这个网站的:

blog.csdn.net/lebang08/article/details/52751088

首先我将判断动态权限的代码写在BaseActivity上:

再次,请求权限:

请求权限回调:

还有一个就是拥有权限后具体业务逻辑:

在具体的Activity上基本就是重写实现具体业务逻辑的这个方法;这里其实也可以写接口实现,不一定在BaseActivity写一个空方法。

具体的实现逻辑是:

判断版本否是6.0以上  ----> 是,判断是否拥有这些权限  --->拥有,实现具体业务逻辑  -----> 没有,动态请求该权限 ----->回调方法,判断是哪一权限---->实现具体业务逻辑

下面是具体的Activity的操作:

上一篇下一篇

猜你喜欢

热点阅读