目前最流行的运行时权限请求框架PermissionsDispatcher、RxPermissions和easypermissions的对比
Android6.0版本的一个重大改动就是增加了运行时权限(动态权限):一些危险的权限不单止要在AndroidMainifest文件声明,还要在运行的时候使用代码来申请,让用户同意才进行授权。
由于Android自带的API使用起来(怎么使用就不写了,网上很多)比较麻烦,所以网上出现了一大堆简化这个过程的开源库,这里介绍目前最流行的三个开源库(GitHub上Star最多)PermissionsDispatcher、RxPermissions和easypermissions进行体验并对比他们的用法,了解一下这三个库的功能,方便做出选择。
这里检查权限的方法我采用了一个工具类封装(由于PermissionsDispatcher、RxPermissions都没带有单纯检查权限的功能,只有easypermissions有,这里用一个工具类封装一下检查权限的方法,返回我想要的字符串):
public class PermissionsLogUtils {
private static StringBuffer logStringBuffer = new StringBuffer();
// 查看权限是否已申请
public static String checkPermissions(Context context,String... permissions) {
logStringBuffer.delete(0,logStringBuffer.length());
for (String permission : permissions) {
logStringBuffer.append(permission);
logStringBuffer.append(" is applied? \n ");
logStringBuffer.append(isAppliedPermission(context,permission));
logStringBuffer.append("\n\n");
}
return logStringBuffer.toString();
}
//使用EasyPermissions查看权限是否已申请
public static String easyCheckPermissions(Context context,String ... permissions) {
logStringBuffer.delete(0,logStringBuffer.length());
for (String permission : permissions) {
logStringBuffer.append(permission);
logStringBuffer.append(" is applied? \n ");
logStringBuffer.append(EasyPermissions.hasPermissions(context,permission));
logStringBuffer.append("\n\n");
}
return logStringBuffer.toString();
}
// 查看权限是否已申请
private static boolean isAppliedPermission(Context context,String permission) {
return context.checkSelfPermission(permission) ==
PackageManager.PERMISSION_GRANTED;
}
}
GitHub地址:https://github.com/hotchemi/PermissionsDispatcher
GitHub地址:https://github.com/googlesamples/easypermissions
GitHub地址:https://github.com/tbruyelle/RxPermissions
共同点
三者都简化了Android6.0申请运行时权限的流程,比使用Android自带的API方便很多,可扩展性高。
不同点
功能 | PermissionsDispatcher | easypermissions | RxPermissions |
单独检查权限功能 | 无 | 有 | 无 |
申请权限前提示操作 | 有,可以自定义操作,弹出Dialog、Toast、SnackBar等等都行 | 有,而且定制了Dialog | 无,需要自己实现 |
不再提示时的处理操作 | 有 | 有,而且可以使用Dialog让用户选择跳到APP设置界面 | 有 |
一次申请多个权限时,对单个失败的权限处理操作 | 无 | 无 | 有 |
结合RxJava | 无 | 无 | 有 |
不能把方法私有 | 有 | 无 | 无 |
另有2个第三方权限申请库,star比上面3个少,推荐用上面3个。
https://github.com/getActivity/XXPermissions
https://github.com/yanzhenjie/AndPermission