gpt4 book ai didi

android - 用户更改从设置屏幕授予权限

转载 作者:太空宇宙 更新时间:2023-11-03 10:35:40 32 4
gpt4 key购买 nike

应用程序需要两个权限:

  1. 读取手机状态
  2. 相机

应用程序有以下屏幕:

屏幕 A:启动画面(根据权限状态处理屏幕导航)

屏幕 B:权限屏幕(如果用户未授予电话权限)

屏幕 C:条款和条件屏幕

启动时,App会检查手机权限是否被授予。如果授予,应用程序将打开屏幕 C,否则它将保留在同一屏幕 B。

步骤:

  1. 打开应用程序 -> 启动画面 -> 权限屏幕
  2. 点击“授予权限”-> 权限对话框-> 拒绝权限
  3. 点击“打开设置”
  4. 授予“相机”权限(而非手机权限)
  5. 点击设备的“后退”按钮并返回到应用。
  6. 权限屏幕将显示为未授予“电话”权限。
  7. 再次重复步骤#2 和#3
  8. 现在删除“相机”权限并授予“电话”权限(因为我们更改了相机权限,应用程序进程将被终止并重新启动)。
  9. 重复第 5 步,启动画面,然后将显示屏幕 C(条款和条件)。
  10. 再次点击“后退”按钮,将显示相同的屏幕 C(屏幕 C 在返回堆栈中有两个实例)

我可以使用 'CLEAR_TASK' 和 'CLEAR_TOP' 标志和 startActivity,目的是了解当用户更改时我们的应用程序会发生什么,设置权限。

观察:

  1. 当用户授予权限时,我们的申请流程将无效。

  2. 当用户删除授予的权限时,Android 应用程序将终止并重新启动应用程序。 (如果发生这种情况,那么为什么要显示两个 T&C 屏幕实例?)

我在这里有点困惑!!

最佳答案

@AndiGeeky 这是一些完整的代码,用于通知用户是否选择了允许或拒绝,它将管理用户选择的另外两个场景“不再询问”或用户是否在允许后更改了设置不允许

       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;
}};

关于android - 用户更改从设置屏幕授予权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45916310/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com