一.AndPermission权限框架介绍
这是由于有些对客户有潜在危险的权限必须要提示客户,而且要客户同意后才能操作,否则页面会出现类似闪退的情况,在网上找了一些教程后发现AndPermission这个现成的开源库。
在这些里面我感觉AndPermission框架很不错,对权限回调以及相应永远拒绝以后的后续处理都很完善。
官方gitbub地址 :https://github.com/yanzhenjie/AndPermission
二.AndPermission使用前的配置
需要在项目中build.gradle添加依赖
三.AndPermission的应用
这里面我用的java8的新特性 ladam公式进行对匿名类的缩写。
如果不明白看不懂请去百度ladam公式在java8中的应用
在这里面AndPermission是使用了一个透明的activity来实现回调成功和失败
1.基本用法:
AndPermission.with(MainActivity.this)
.runtime()
.permission(Permission.Group.STORAGE)//权限组 存储
.rationale((Context context, List<String> data, RequestExecutor executor) -> {})//拒绝一次后重试
.onGranted(permission -> {})//权限调用成功后的回调
.onDenied(permissions -> {})//权限调用失败后的回调
.start();
2. runtime install overlay 三种方法
三个方法的介绍
runtime() 一般的权限组的权限请求
install() 在Android8.0系统以上更新apk的时候,安装未知来源的apk的时候需要。
overlay() 在Android 6或更高的其他应用程序的顶部绘制。需要这个权限android.permission.SYSTEM_ALERT_WINDOW.
3.权限组
一共也就九个
CAMERA // 摄像头权限
SENSORS //传感器权限
MICROPHONE // 录制音频权限
CALENDAR //日历权限
LOCATION //定位权限
STORAGE //存储权限
CONTACTS //通讯录权限
SMS //短信权限
PHONE //电话权限
4.举个例子如果你想做一个打开摄像头进行拍照。
这是在点击按钮的View.OnClickListener事件中进行的
AndPermission.with(MainActivity.this)
.runtime()
.permission(Permission.Group.CAMERA)
.rationale((Context context, List<String> data, RequestExecutor executor) -> {
new AlertDialog.Builder(context)
.setTitle("权限申请")
.setMessage("这里需要申请" + data.get(0))
.setPositiveButton("好的", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
executor.execute();
}
})
.setNegativeButton("取消", null)
.create()
.show();
}
)
.onGranted(permission -> {
Intent intent = new Intent();
// 指定开启系统相机的Action
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivityForResult(intent, 1);
}
)
.onDenied(permissions -> {
if (AndPermission.hasAlwaysDeniedPermission(MainActivity.this, permissions)) {
new AlertDialog.Builder(MainActivity.this)
.setTitle("权限获取失败")
.setMessage("没有权限该功能不能使用,是否进入应用设置中进行权限中设置!")
.setPositiveButton("好的", (DialogInterface dialog, int which) -> {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", AttrGet.getPackageName(), null);
intent.setData(uri);
MainActivity.this.startActivity(intent);
}
)
.setNegativeButton("取消", null)
.create()
.show();
}else{
Toast.makeText(MainActivity.this, "开启权限失败", Toast.LENGTH_SHORT);
}
})
.start();
5.AndPermission本身提供的跳转设置之后的回调
AndPermission.permissionSetting(this).onComeback(new Setting.Action() {
@Override
public void onAction() {
//设置页面跳转回来回调事件
}
}).start();