依赖: // https://github.com/yanzhenjie/AndPermission api 'com.yanzhenjie:permission:2.0.0-rc12'
工具类:
/**
* 权限工具类
*/
public abstract class PermissionUtils {
public void checkPerm(final String permission) {
// requestPermission(permission);
AndPermission.with(BaseApplication.getCurrentActivity())
.runtime()
.permission(permission)
.onGranted(new Action<List<String>>() {
@Override
public void onAction(List<String> data) {
if (PermissionChecker.checkSelfPermission(BaseApplication.getCurrentActivity(), data.get(0)) == PackageManager.PERMISSION_GRANTED) {
onGrant();
return;
}
if (AndPermission.hasAlwaysDeniedPermission(BaseApplication.getCurrentActivity(), data)) {
final List<String> strings = Permission.transformText(BaseApplication.getCurrentActivity(), data);
new AlertDialog.Builder(BaseApplication.getCurrentActivity())
.setCancelable(false)
.setTitle("警告")
.setMessage("我们需要" + strings.get(0) + "权限,请您手动授权,否则功能无法正常使用!")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
AndPermission.with(BaseApplication.getCurrentActivity())
.runtime()
.setting()
.onComeback(new Setting.Action() {
@Override
public void onAction() {
if (PermissionChecker.checkSelfPermission(BaseApplication.getCurrentActivity(), strings.get(0)) == PackageManager.PERMISSION_GRANTED) {
onGrant();
return;
}else {
onDenied();
}
}
}).start();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
onDenied();
}
})
.show();
}
}
})
.onDenied(new Action<List<String>>() {
@Override
public void onAction(final List<String> data) {
if (ActivityCompat.checkSelfPermission(BaseApplication.getCurrentActivity(), data.get(0)) == PackageManager.PERMISSION_GRANTED) {
onGrant();
return;
}
if (AndPermission.hasAlwaysDeniedPermission(BaseApplication.getCurrentActivity(), data)) {
final List<String> strings = Permission.transformText(BaseApplication.getCurrentActivity(), data);
new AlertDialog.Builder(BaseApplication.getCurrentActivity())
.setCancelable(false)
.setTitle("警告")
.setMessage("我们需要" + strings.get(0) + "权限,请您手动授权,否则功能无法正常使用!")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
AndPermission.with(BaseApplication.getCurrentActivity())
.runtime()
.setting()
.onComeback(new Setting.Action() {
@Override
public void onAction() {
if (PermissionChecker.checkSelfPermission(BaseApplication.getCurrentActivity(), strings.get(0)) == PackageManager.PERMISSION_GRANTED) {
onGrant();
return;
}else {
onDenied();
}
}
}).start();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
onDenied();
}
})
.show();
}
}
}).start();
}
/**
* Request permissions.
*/
public void requestPermission(String... permissions) {
AndPermission.with(BaseApplication.getCurrentActivity())
.runtime()
.permission(permissions)
.rationale(new RuntimeRationale())
.onGranted(new Action<List<String>>() {
@Override
public void onAction(List<String> permissions) {
onGrant();
}
})
.onDenied(new Action<List<String>>() {
@Override
public void onAction(@NonNull List<String> permissions) {
if (AndPermission.hasAlwaysDeniedPermission(BaseApplication.getCurrentActivity(), permissions)) {
showSettingDialog(BaseApplication.getCurrentActivity(), permissions);
}else {
onDenied();
}
}
})
.start();
}
/**
* Display setting dialog.
*/
public void showSettingDialog(Context context, final List<String> permissions) {
final List<String> permissionNames = Permission.transformText(context, permissions);
new AlertDialog.Builder(context)
.setCancelable(false)
.setTitle("警告")
.setMessage("请在设置里给我们这些权限:" + permissionNames.get(0))
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setPermission(permissionNames.get(0));
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
onDenied();
}
})
.show();
}
/**
* Set permissions.
*/
private void setPermission(final String permission) {
AndPermission.with(BaseApplication.getCurrentActivity())
.runtime()
.setting()
.onComeback(new Setting.Action() {
@Override
public void onAction() {
if (PermissionChecker.checkSelfPermission(BaseApplication.getCurrentActivity(), permission) == PackageManager.PERMISSION_GRANTED) {
onGrant();
}else {
onDenied();
}
}
})
.start();
}
public abstract void onGrant();
/**
* 没有权限
*/
public abstract void onDenied();
}