问题描述
我在 PreferenceScreen 中添加了一个 Preference 按钮以在 Android 11 中调用 Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
:
prefn.setonPreferenceClickListener(arg0 -> {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
Uri uri = Uri.fromParts("package",getPackageName(),null);
intent.setData(uri);
startActivity(intent);
return true;
});
if (Environment.isExternalStorageManager()) {
pref.setSummary("Allowed");
} else {
pref.setSummary("Not Allowed");
}
当我将设置从 Allow
更改为 Not allow
并关闭设置屏幕时,PreferenceScreen 会重新加载(特别是 onCreate()
),并且偏好摘要更改为“不允许”,正如预期的那样。但是,如果我单击并将设置从 Not allow
更改为 Allow
,它不会重新加载,并且尽管该设置在 Allow
中,但摘要仍然显示“不允许”状态。更奇怪的是,如果我更改 3 次,Not allow
到 Allow
到 Not allow
到 Allow
,它会重新加载并且摘要显示“允许”,这是应该的。>
有什么线索吗??我尝试调用 startActivityForResult
没有成功。
解决方法
这不是解决方案,而是一种变通方法。一个懦夫,对不起。
只需通过 Preference 活动的 onResume()
方法修复该事物。即,在调用 Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
之前,设置一个变量:
lastManagerPerm = Environment.isExternalStorageManager();
然后在 onResume()
中:
public void onResume() {
super.onResume();
if (Build.VERSION.SDK_INT >= 30 && !lastManagerPerm && Environment.isExternalStorageManager()) {
prefn.setSummary("Allowed");
....
}
}