「二度と尋ねない」チェックボックスのブールフラグが格納されている場所と、その値をクリアする方法を知りたいですか?必ずしもプログラムではなく、手動で-設定、コマンド、または何らかのツールを使用して。アプリデータのクリア、アンインストール、アンインストールとクリアの両方を試し、アクセス許可のオン/オフを手動で切り替えてみました。エミュレーター用に新しいマシュマロイメージをセットアップしようとしましたが、うまくいきませんでした。
データのクリア([設定]> [アプリ]> [アプリ]> [ストレージ]> [データのクリア])とアプリのアンインストールの両方で、このフラグのステータスがクリアされ、アプリのランタイム権限に関連する他のすべてがクリアされます。
この動作は、Android 6.0、 このサンプルアプリ を介して)を実行しているNexus5でテストされました。
これの手動オプションをどこかで見たことを思い出しているようですが、今は見つかりません。これは、M Developer Previewリリースに存在し、最終6.0リリースでプルされたものである可能性があります。
アプリの設定からデータをクリアすることで、それを「忘れる」ことができます。
EDIT:@ 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:私は this answerで完全な実装に答えました。
https://www.youtube.com/watch?v=F8hQfmYTEaQ
[設定]-> [アプリのアクセス許可]領域で、アクセス許可を手動で有効または無効にする必要があります。
私はこのページで与えられたすべての提案を試しました。それらのどれも機能しませんでした。手動で有効または無効にすると、ダイアログボックスが返されました。
上記のYouTube投稿をクリックして、これが正解であることを確認してください
@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())));
}
}
}
私のために働いた唯一の解決策は:
その後、「二度と尋ねない」という選択を忘れます。
あなたはこのビデオでそれをチェックすることができます https://www.youtube.com/watch?v=F8hQfmYTEaQ