前提:当App没有赋予权限,并且有更新弹窗的时候,去设置给予权限,然后回来,弹窗是2个或者3个。
解决方式:(缺点:回来的时候,可能有闪动的界面,清除多余的界面)
if (null != savedInstanceState) {
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
原来定位的是这么设置:
AlertDialog.Builder bd = new HuzAlertDialog.Builder(MainActivity.this);
bd.setTitle("温馨提示");
bd.setMessage("您的定位没有开启,为了不影响您正常使用,请将定位开启");
bd.setPositiveButton("立即开启", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent localTntent = new Intent();
localTntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= 9) {
localTntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
localTntent.setData(Uri.fromParts("package", getPackageName(), null));
} else if (Build.VERSION.SDK_INT <= 8) {
localTntent.setAction(Intent.ACTION_VIEW);
localTntent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
localTntent.putExtra("com.android.setting.ApplicationPkgName", getPackageName());
}
startActivity(localTntent);
}
});
bd.setNeutralButton("残忍拒绝", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
bd.show();
最好不要跳到设置去给予权限,在当前的界面设置权限:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 判断权限是否拥有
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED||
ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
LogUitl.e("=====onRequestPermissionsResult=====:未被授予,需要申请");
requestPhotoPermissions();
}
}
private static String[] PERMISSIONS_PHOTO = {Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE};
private static final int REQUEST_PHOTO_SYN = 3;
private void requestPhotoPermissions() {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_COARSE_LOCATION)||
ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// 如果是第二次申请,需要向用户说明为何使用此权限,会带出一个不再询问的复选框!
LogUitl.e("=====onRequestPermissionsResult====:如果是第二次申请,需要向用户说明为何使用此权限,会带出一个不再询问的复选框");
android.support.v7.app.AlertDialog.Builder builder=new android.support.v7.app.AlertDialog.Builder(MainActivity.this);
builder.setMessage("只有定位和存储权限,才可以正常使用该APP!");
builder.setTitle("定位和存储权限");
builder.setPositiveButton("前往设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(MainActivity.this, PERMISSIONS_PHOTO,REQUEST_PHOTO_SYN);
}
});
builder.setNegativeButton("残忍拒绝", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
} else {
LogUitl.e("=====onRequestPermissionsResult=====:第一次申请此权限,直接申请");
ActivityCompat.requestPermissions(this, PERMISSIONS_PHOTO, REQUEST_PHOTO_SYN);
}
}
@Override
public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults) {
switch (requestCode){
case REQUEST_PHOTO_SYN:
LogUitl.e("=====onRequestPermissionsResult=====:这里有个多权限的检查,需要检查每一个权限是否都被授权了");
if (PermissionUtil.verifyPermissions(grantResults)) {
// showPicturePicker();
LogUitl.e("=====onRequestPermissionsResult=====:true,所有权限已经被授予");
} else {
showToast("定位和存储权限被拒绝,部分功能将不能使用!");
}
break;
default:
break;
}
}