Android运行时权限简单实用封装-Runtime Permissions

一、简述

根据郭神的思路完成本此封装,Android运行时权限申请和使用。稍微完善一点。

若喜欢看郭神原贴请参见郭神原视频讲解。

运行时权限是在Android 6.0之后增加的,6.0之前只需要在安装的时候全部同意就行了。运行时权限是多一层安全申请,在App运行过程中涉及到危险权限,需要进行动态申请。比如定位权限,存储权限等。

运行时权限,是在App运行过程中在需要某些危险权限时需要动态申请,系统弹窗,用户同意后才可进行继续操作。如果在Android 6.0之后不进行“危险权限”申请而直接操作,应用会崩溃。

二、思想

权限申请,须在Activity或者Fragment中申请,然后系统弹窗,用户同意后会回调Activity方法通知用户是否同意权限申请,进而判断是否可进行下一步操作。

现在使用系统的权限申请繁琐之处就在于,每次都要检查-->申请-->回调判断,然后再执行,会很繁琐。每个Activity或Fragment中都要重写onRequestPermissionsResult方法回调判断,所以增加很多重复代码。程序员是懒惰的,所以封装复用才是王道O(∩_∩)O~

实现思路,做Android开发一般都会写BaseActivity,把每个页面可能会用到的东西写进去,以免每个Activity都重写。此次我们也把权限申请放到Base中,而且写一个静态的方法哪里都可以调用,进行权限检查和申请。利用接口回调进行执行。

1、想要随处可调,但是权限申请只能在Activity中申请回重写回调,那么就想到了Activity栈,就用栈顶Activity代劳可否。

2、所以需要自己写一个Activity存储类,可以取到栈顶,一般也会在自定义Application中去完成这个任务。

3、使用栈顶Activity去申请和回调,然后再通过接口完成回调。

好了,开始撸代码吧!

三、BaseActivity中怎么写

Android运行时权限简单实用封装-Runtime Permissions_第1张图片

是不是有点儿长,不多,请手动敲击一遍,此处小坑,哈哈...

1、在Activity创建时候,把此Activity天骄到收集器中,在销毁的时候从收集器中移除。

2、静态的方法进行权限申请,申请权限的对象就是Activity收集器中的栈顶Activity,所以权限申请回调也会在栈顶Activity中。别忘了此方法为静态方法,所以Activity存储方法和存储集合也必须为“静态”的方法和集合。

里边先对申请的权限进行检查,若全部已经被同意,则直接使用传进来的接口进行全部同意方法onAllGranted回调通知,如果有没被同意的权限则进行权限申请。

3、权限申请回调结果onRequestPermissionsResult中遍历回调结果,如果全部同意则回调onAllGranted方法通知,如果有被同意,有没有被同意的,则分别放入两个集合进行分别在onGranted中和onDenied中回调通知。

如果申请多个权限,必要权限在onGranted中,则可进行自己的下一步,否则不执行下一步。

注:小坑在此,如果申请多个权限,而必要权限已经之前已经被同意,则不会申请,必然不会在部分权限同意的回调中找到,此时怎弄...唉...唉...唉...那就在没被同意的权限搜索,如果不包含需要权限,则可执行下一步,是不是就解决了O(∩_∩)O哈哈~

四、Activity收集器

Android运行时权限简单实用封装-Runtime Permissions_第2张图片

没啥可多说的!

注意集合,方法都必须是静态的!

收集器功能也可放入自定义Application中,请自行解决!

五、完成,搞起吧...

Android运行时权限简单实用封装-Runtime Permissions_第3张图片

权限申请就是这么easy,尽情撸代码吧!

六、怎么也得放一张动态图,展现功力啊!


Android运行时权限简单实用封装-Runtime Permissions_第4张图片

最后:有什么不对的地方请多多指教...请多多留言...

O(∩_∩)O哈哈~

你可能感兴趣的:(Android运行时权限简单实用封装-Runtime Permissions)