android进阶:手写权限请求

来源:互联网 发布:淘宝店铺被处置 编辑:程序博客网 时间:2024/06/05 03:02

废话不多说现在开车!

现在需要请求相机、通讯录、定位、外部储存权限。
既然请求权限就先了解自行了解:
///请求权限的
 requestPermissions(@NonNull String[] permissions, int requestCode);
///判断是否拒绝过
 shouldShowRequestPermissionRationale(@NonNull Activity activity,
 @NonNull String permission)
1、正常的权限请求:
这里写图片描述
 不断允许,刷~完成。
2、如果第一个点击禁止其余允许,那么下次就会出来这个:
这里写图片描述
3、这个时候如果继续点击禁止,下次也是同样出现这个这个时候需要提示应用为什么需要这些权限。
这里写图片描述
4、如果点击不在提示并且拒绝,那么这个窗口将不在出现,这个时候就要判断是否有权限,然后提示在应用管理的设置手动添加权限了
这里写图片描述
这里写图片描述
5、步骤都了解了,剩下就是踩坑(机型适配),首先小米是大坑,具体:
http://blog.csdn.net/qq_34881609/article/details/55100965
 还有一个问题是启动了setting的页面,当在上面修改权限的时候,activity是会被杀掉的,自己猜想,估计是权限变更了,要把原来的旧权限的activity销毁,这样不产生冲突。网上也说在fragment启动,fragment也是会被杀的,所以我这个权限请求的启动一个无界面activity请求,杀也就是杀它,不影响原来的。
 除此之外还遇到一些问题,就是有时候在setting进行设置的时候原来的app会整个被杀,我也无语(偶然性)我也不知道,代码也觉得没问题(自判断系统是自己杀的…),然后就导致onActivityResult不能回调,不过影响不大,再点击请求权限多一次咯。
6、撸了一天多,参考其他开源的也写了一个像样的东西出来,自认为是没有内存泄漏的,有得话,丢砖头给我吧,马上改!代码基本都有注释无warning
下面是使用示例: github:https://github.com/DMings/TestPermission

DMPermission.with(MainActivity.this)        .setNeedPermissionMsg("应用需要相机、通讯录、定位、外部储存才能正常工作")        .setDeniedPermissionMsg("需要到应用管理确保设置了相机、通讯录、定位、外部储存权限")        .setPermissionAndRequest(                Manifest.permission.WRITE_CONTACTS,                Manifest.permission.CAMERA,                Manifest.permission.ACCESS_COARSE_LOCATION,                Manifest.permission.WRITE_EXTERNAL_STORAGE        ).setListener(new DMPermission.OnListener() {    @Override    public void onFail() {        Toast.makeText(MainActivity.this,"获取权限失败!",Toast.LENGTH_SHORT).show();    }    @Override    public void onSuccess() {        Toast.makeText(MainActivity.this,"获取权限成功!",Toast.LENGTH_SHORT).show();    }});
原创粉丝点击