关于API < 23的权限适配解决问题
2017-08-18 16:53
232 查看
前言
由于公司的项目并没有做权限适配,然后客户反馈如果禁用掉权限,就没有什么反应(并不会崩溃,所以无法使用try/catch的方法),因此还要另想解决方案解决这个问题,当然我这个方案并不是最好,如果大家还有什么其他方案,可以与我联系分享哈。以下文字仅以记录解决该问题的过程,以拨号权限为例。
基本思路
直接拨打电话的代码:
假设有权限
拨打电话在之后肯定会在通话界面,因此使用到该权限的Activity就会进入onPause,所以判断有没有权限的关键就是:
1、点击了需要拨号权限的地方;
2、Activity进入onPause;
只要同时满足这两个条件,就是有了拨号权限;
解决办法
设置一个int变量,当点击需要权限的地方,与1执行或操作;当进入onPause方法,与2进行或操作;如果500ms后这个变量不等于3,则没有拨号权限。
当然,在进入onResume方法还需要重置这个int变量为0。
进入onDestroy方法执行removeCallBack操作。
我将具体的代码都写在了PermissionHandler这个类中,详见PermissionHandler.java
Android4.4版本之前的兼容
在测试这个方案的过程中,由于部分国产手机在4.4之后都能够手动控制权限,所以一开始这个方案对4.4之后的版本是有效果的,但是4.4之前(包括4.4)的版本是一开始就授权的,只有在第一次使用的时候才会弹出是否授权的对话框。而且在4.4之前没有插入SIM卡的时候也不会有任何提示,因此新增了一个判断是否有插入SIM卡的工具类。
测试机型&系统版本
oppo R9m Android5.1
华为Mate9 Android7.0
vivo X3V Android4.4.2
vivo Y18L Android4.3
小米 红米 Note 4X Android6.0.1
Sample地址
由于公司的项目并没有做权限适配,然后客户反馈如果禁用掉权限,就没有什么反应(并不会崩溃,所以无法使用try/catch的方法),因此还要另想解决方案解决这个问题,当然我这个方案并不是最好,如果大家还有什么其他方案,可以与我联系分享哈。以下文字仅以记录解决该问题的过程,以拨号权限为例。
基本思路
直接拨打电话的代码:
Uri uri = Uri.parse("tel:15008001234"); Intent intent = new Intent(Intent.ACTION_CALL, uri); startActivity(intent);
假设有权限
拨打电话在之后肯定会在通话界面,因此使用到该权限的Activity就会进入onPause,所以判断有没有权限的关键就是:
1、点击了需要拨号权限的地方;
2、Activity进入onPause;
只要同时满足这两个条件,就是有了拨号权限;
解决办法
设置一个int变量,当点击需要权限的地方,与1执行或操作;当进入onPause方法,与2进行或操作;如果500ms后这个变量不等于3,则没有拨号权限。
当然,在进入onResume方法还需要重置这个int变量为0。
进入onDestroy方法执行removeCallBack操作。
我将具体的代码都写在了PermissionHandler这个类中,详见PermissionHandler.java
Android4.4版本之前的兼容
在测试这个方案的过程中,由于部分国产手机在4.4之后都能够手动控制权限,所以一开始这个方案对4.4之后的版本是有效果的,但是4.4之前(包括4.4)的版本是一开始就授权的,只有在第一次使用的时候才会弹出是否授权的对话框。而且在4.4之前没有插入SIM卡的时候也不会有任何提示,因此新增了一个判断是否有插入SIM卡的工具类。
测试机型&系统版本
oppo R9m Android5.1
华为Mate9 Android7.0
vivo X3V Android4.4.2
vivo Y18L Android4.3
小米 红米 Note 4X Android6.0.1
Sample地址
相关文章推荐
- android------关于API 23的权限问题
- 关于Windows无法访问指定设备路径或文件,您可能没有合适的权限访问问题解决<转>
- 关于注册Google Map api key的方法和解决网页无法显示的问题
- 使用openprocess时解决问题,关于权限分配有感
- 关于IIS 对temp目录权限问题的解决分享! .
- 关于CUDA C 项目中“ error C2059: 语法错误:“<” ”问题的解决方法
- 关于Dictionary<k,v>绑定DataGridView的问题以及曲线解决办法
- 关于从别处导入工程进eclipse后,res的values中styles中<style name="AppBaseTheme"出现问题解决办法
- 关于API 23 中Fragment的public void onAttach(Context context) 没有被调用的问题
- android开发(37) android使用android_serialport_api 操作串口,解决权限问题
- 关于android api 23 +的权限问题
- 关于android sdk 23 无法引入httpclient问题的解决
- 关于八数码问题中的状态判重的三种解决方法(编码、hash、<set>)
- 关于jquery mobile使用<a href="#"></a>进行页面跳转返回上一页出现空白页问题的解决
- 一个关于NTFS权限/DTS/ASP.Net的问题解决过程
- 关于Win32 API(VC作为程序设计语言)的创建线程,解决互斥访问临界资源问题
- android开发(37) android使用android_serialport_api 操作串口,解决权限问题
- 关于屏幕适配问题的工作<个人记录>
- 关于注册Google Map api key的方法和解决网页无法显示的问题
- 关于IIS 对temp目录访问权限问题的解决方法