问题:
android 开发中,权限是一个重要的环节,不可避免的环节。尤其是刚入行的小白们,认为在配 AndroidManifest 中加入权限表就万事大吉。 没想自己测试时还是正常,打包发布别人安装后总会出现各种BUG 或闪退。通过调试也找不到问题所在。 没想到的是,权限没有拿到导至调用系统功能失败,引法闪退或其他的问题。 在刚好在项目开发中就遇到这个问题,拿各种手机上试,有手机闪退,通过调试后发现了这个问题。相信在你们开发同样会遇到这个问题, 这个问题来自 android 系统升级到 android 6 以后的版本手机,都会有这样的问题。
分析:
通过分析, 在手机安装时,1一些厂商系统默认禁用权限导致用户权限被禁用,2用户习惯性安装应用主动禁用权限,3用户安装时无意点击禁用权限功能。 在用户主动禁用权限后,发起请求权限时不能弹出请求界面,权限不法使用。
解决方法:
检验自身权限是否被禁用
请求用户开启权限
引导用户到系统设置界面打开权限
用到系统函数
ActivityCompat.checkSelfPermission
ActivityCompat.shouldShowRequestPermissionRationale
ActivityCompat.requestPermissions
分别是根权是否开启
用户是否主动禁用
请求用户分配权限
解决流程:
解决流程
有了解方案,就可以进行代码编写
一个个权限编写申请,那就太麻烦了,我想不是我们搞技术的所要的,我们要的就是快速,没有 “一劳永逸”的方法,答案是有的。通过两行代码就能解决问题,这样是为是简单多了呢?
PermissionUtil.checkPermission(this,null); PermissionUtil.onRequestPermissionsResult(this,requestCode,permissions,grantResults);
示例代码 :
/**
* 启动ACtivity 权限申请
*/
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_splash);
//第一步
//测试权限并请求权限
PermissionUtil.checkPermission(this,null);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//第二步
//申请权限结果用户禁用引到系统设置
PermissionUtil.onRequestPermissionsResult(this,requestCode,permissions,grantResults);
}
}
把所有核心代码封装代码写到 PermissionUtil 类中完成,保持使用主代码简洁。
够简单吧只有两行代码,每次新工程都能快速移植。
展示最核代码,相信以你的智慧其他的简单代码也难不到你了吧!
核心代码
通过AndroidManifest.xml 中配置的权限,一一效验,不需要手动一个个写成代码进行验证那么麻烦。 如果没有权限就调用申请权限,如果有用户主动拒绝权限,直接跳到设置界面。
我们来看看我们的开发的项目测试效果
运行应用权限是被禁用状态
启动时弹出申请题示
跳转到设置界面
当权限都通过,就不会弹出提示
代码己上存
https://download.csdn.net/download/gao5411/12117324
如有需要原代码请移步到
或有任何疑问请给我留言