「二度と質問しない」チェックボックスのブールフラグがどこに保存されているか、その値をクリアする方法を知りたいですか? 必ずしもプログラムではなく、設定、コマンド、またはツールを介して手動で。アプリデータのクリア、アンインストール、アンインストールとクリアの両方を試み、パーミッションのオン/オフを手動で切り替えようとし、エミュレーター用に新しいマシュマロイメージをセットアップしようとしましたが、うまくいきませんでした!
質問する
18290 次
6 に答える
9
データの消去 ([設定] > [アプリ] > [アプリ] > [ストレージ] > [データの消去]) とアプリのアンインストールの両方で、このフラグのステータスが消去され、アプリの実行時のアクセス許可に関連する他のすべてが消去されます。
この動作は、このサンプル アプリを使用して、Android 6.0 を実行している Nexus 5 でテストされました。
このための手動オプションをどこかで見たのを覚えているようですが、今は見つかりません。これは、M Developer Preview リリースで存在し、最終的な 6.0 リリースで削除されたものである可能性があります。
于 2015-11-09T13:23:14.507 に答える
7
アプリの設定からデータを消去することで、それを「忘れる」ことができます。
編集: @me_ が指摘したように、アプリ データを消去するだけでは、一部のデバイスでは「再度確認しない」状態がリセットされない場合があります。このような場合、アプリの設定から権限を手動でオンにしてからオフにするとうまくいきます。
ただし、許可が再度要求しないように設定されているかどうかを確認したい場合は、onRequestPermissionsResult()
メソッドを使用してプログラムで確認できます。
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
for(String permission: permissions){
if(ActivityCompat.shouldShowRequestPermissionRationale(this, permission)){
//denied
}else{
if(ActivityCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED){
//allowed
} else{
//set to never ask again
Log.e("set to never ask again", permission);
}
}
}
}
PS:この回答で完全な実装に回答しました。
于 2016-12-22T16:55:25.930 に答える
1
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
boolean dontAsk = false;
if (requestCode == REQUEST_CAM_STORAGE_PERMISSION) {
for (String allowedPermissions : permissions) {
if (ActivityCompat.shouldShowRequestPermissionRationale(context, allowedPermissions)) {
Log.e("Permission: ", "User Has Denied Permission");
} else if (PermissionChecker.checkCallingOrSelfPermission(context, allowedPermissions) != PackageManager.PERMISSION_GRANTED) {
Log.e("Permission: ", "User Has Denied Permission with Don't Ask Again");
dontAsk = true;
break;
} else {
Log.e("Permission: ", "User Has Allowed Permission");
}
}
if (!dontAsk) {
Log.e("Permission: ", "Dont'Ask False");
checkPermission();
} else {
Log.e("Permission: ", "Dont'Ask True");
startActivity(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + this.getPackageName())));
}
}
}
于 2019-03-12T07:26:37.760 に答える