动态权限申请
2020-01-16 本文已影响0人
tuyrt7
效果图
一直弹窗申请,直到授权申请后被拒绝,弹窗提示,可以取消
加入项目步骤:
- 根目录下build.gradle添加
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- 主工程build.gradle the dependency
dependencies {
implementation 'com.github.tuyrt7:PermissionImpl:v1.0.2'
}
permission模块:动态权限申请
- 链式调用、轻量不依赖其他库
- 可以activity/fragment申请(内部创建fragment继承自androidx.fragment.app.fragment)
- 动态设置是否弹窗提示(内部默认显示)
- 也可以自己处理拒绝权限后回调,在.requestPermission(PermissionListener),自己在回调中处理提示
- 当勾选不再提示后,默认显示弹窗进入设置页面开启(未监听设置中是否开启权限)
- 如果有必须取得的权限,可以设置.isRejectNoCancelDialog(true):监听弹窗取消按钮后再次弹出窗口,直到获得权限
- 适配8.0的系统弹窗,应用内安装的特殊权限
使用方式
//声明权限组
String[] per = new String[]{
Manifest.permission.CAMERA,
Manifest.permission.CALL_PHONE
};
//调用,都是默认值
PermissionImpl.newPermission()
.fragment(this)
//.activity(this)
.permission(Permission.SYSTEM_ALERT_WINDOW)
.permission(Permission.REQUEST_INSTALL_PACKAGES)
//.permission(per)
.permission(Permission.WRITE_EXTERNAL_STORAGE)//add 权限
.isRejectDialog(true)//显示拒绝弹窗
.isRejectNoCancelDialog(false)//取消后是否继续弹窗
.isRejectWithNeverDialog(true)////显示拒绝弹窗
.isEnterAppSetting(true)//进入应用设置页得的方式(false进入系统权限设置,适配各大厂商sdk--未测试,测试过自己华为mate,发现设置true比较方便)
.requestPermission(new AdapterPermissionListener(){
@Override
public void onGranted() {
Log.d("Fragment", "获取所有的权限");
Toast.makeText(getContext(), "Fragment 获取所有的权限", Toast.LENGTH_SHORT).show();
}
});
//简单使用
PermissionImpl.newPermission()
.activity(this)
.permission(per)
.requestPermission(new AdapterPermissionListener() {
@Override
public void onGranted() {
Toast.makeText(PermissionActivity.this, "所有权限都已授权", Toast.LENGTH_SHORT).show();
}
});