使用三方控件blankj的权限
导包:
implementation 'com.blankj:utilcode:1.28.0'
blankj的权限,只有有一条授权就会调用onGranted(),
有一条没授权调用onDenied(),全部授权则不调用。
所以判断是否全部授权比较麻烦,通过handler延时方式解决,没有权限结束,全部授权跳转界面
Handler handler = new MyHandler(this);
private void initPermission() {
@PermissionConstants.Permission String[] permissions = {
PermissionConstants.PHONE,
PermissionConstants.CAMERA,
PermissionConstants.MICROPHONE,
PermissionConstants.STORAGE,
PermissionConstants.LOCATION,
};
PermissionUtils.permission(
permissions)
.rationale(new PermissionUtils.OnRationaleListener() {
@Override
public void rationale(UtilsTransActivity activity, ShouldRequest shouldRequest) {
DialogHelper.showRationaleDialog(shouldRequest);
}
})
.callback(new PermissionUtils.FullCallback() {
@Override
public void onGranted(List<String> permissionsGranted) {
LogUtils.d(permissionsGranted); handler.sendEmptyMessageDelayed(MyHandler.MESSAGE_MAIN,500);
}
@Override
public void onDenied(List<String> permissionsDeniedForever, List<String> permissionsDenied) {
if (!permissionsDeniedForever.isEmpty()) {
DialogHelper.showOpenAppSettingDialog();
}
if (permissionsDenied.size() > 0) {
handler.removeCallbacksAndMessages(null);
handler.sendEmptyMessageDelayed(MyHandler.MESSAGE_FINISH,200);
}
}
})
.request();
}
private static class MyHandler extends Handler{
public static final int MESSAGE_FINISH = 1;
public static final int MESSAGE_MAIN = 2;
private final WeakReference<SplashActivity> activity;
public MyHandler(SplashActivity activity){
this.activity = new WeakReference<>(activity);
}
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
SplashActivity activity = this.activity.get();
switch (msg.what){
case MESSAGE_FINISH:
activity.finish();
break;
case MESSAGE_MAIN:
ARouter.getInstance().build(RouteCons.Main.MainACT).navigation();
activity.finish();
break;
}
}
}
DialogHelper.class
导包
implementation 'com.afollestad.material-dialogs:core:0.9.6.0'
import android.app.Activity;
import android.support.annotation.NonNull;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.PermissionUtils;
import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldRequest;
public class DialogHelper {
public static void showRationaleDialog(final ShouldRequest shouldRequest) {
Activity topActivity = ActivityUtils.getTopActivity();
if (topActivity == null) return;
new MaterialDialog.Builder(topActivity)
.title("提示")
.content("需要同意权限才能正确使用")
.positiveText("同意")
.negativeText("不同意")
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
shouldRequest.again(true);
}
})
.onNegative(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
shouldRequest.again(false);
}
})
.show();
}
public static void showOpenAppSettingDialog() {
Activity topActivity = ActivityUtils.getTopActivity();
if (topActivity == null) return;
new MaterialDialog.Builder(topActivity)
.title("提示")
.content("去设置打开权限?")
.positiveText("去打开")
.negativeText("不打开")
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
PermissionUtils.launchAppDetailsSettings();
}
})
.show();
}
}