用户设置android,android – 用户更改从“设置”屏幕授予“权限”

这段代码展示了在Android M及以上版本中如何处理用户对WRITE_EXTERNAL_STORAGE权限的响应。如果用户授予权限,代码将写入文件;如果用户拒绝并选择"NeverAskAgain",则引导用户进入应用设置更改权限;如果用户简单地拒绝,会显示一个对话框,让用户选择重试或退出应用。
摘要由CSDN通过智能技术生成

@AndiGeeky这里有一些完整的代码告知用户是否选择了Allow或Deny,它将管理用户选择的另外两个场景Never Again Again或用户在允许不允许的情况下更改设置

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {

//.... write file into storage ...

System.out.println("SDK > BuildVersion TRUE");

} else {

requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 666); // Comment 26

System.out.println("go to requestPermissions");

}

}

onLoad();

}

@Override

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

switch (requestCode) {

case 666: // Allowed was selected so Permission granted

if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

Snackbar s = Snackbar.make(findViewById(android.R.id.content),"Permission Granted",Snackbar.LENGTH_LONG);

View snackbarView = s.getView();

TextView textView = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);

textView.setTextColor(Color.RED);

textView.setTextSize(18);

textView.setMaxLines(6);

s.show();

// do your work here

} else if (Build.VERSION.SDK_INT >= 23 && !shouldShowRequestPermissionRationale(permissions[0])) {

// User selected the Never Ask Again Option Change settings in app settings manually

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

alertDialogBuilder.setTitle("Change Permissions in Settings");

alertDialogBuilder

.setMessage("" +

"\nClick SETTINGS to Manually Set\n"+"Permissions to use Database Storage")

.setCancelable(false)

.setPositiveButton("SETTINGS", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

Uri uri = Uri.fromParts("package", getPackageName(), null);

intent.setData(uri);

startActivityForResult(intent, 1000); // Comment 3.

}

});

AlertDialog alertDialog = alertDialogBuilder.create();

alertDialog.show();

} else {

// User selected Deny Dialog to EXIT App ==> OR <== RETRY to have a second chance to Allow Permissions

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

alertDialogBuilder.setTitle("Second Chance");

alertDialogBuilder

.setMessage("Click RETRY to Set Permissions to Allow\n\n"+"Click EXIT to the Close App")

.setCancelable(false)

.setPositiveButton("RETRY", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

//ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, Integer.parseInt(WRITE_EXTERNAL_STORAGE));

Intent i = new Intent(MainActivity.this,MainActivity.class);

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(i);

}

})

.setNegativeButton("EXIT", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

finish();

dialog.cancel();

}

});

AlertDialog alertDialog = alertDialogBuilder.create();

alertDialog.show();

}

}

break;

}};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值