web-dev-qa-db-ja.com

Android Mランタイム権限ダイアログで「二度と尋ねない」」の選択を忘れる方法

enter image description here

「二度と尋ねない」チェックボックスのブールフラグが格納されている場所と、その値をクリアする方法を知りたいですか?必ずしもプログラムではなく、手動で-設定、コマンド、または何らかのツールを使用して。アプリデータのクリア、アンインストール、アンインストールとクリアの両方を試し、アクセス許可のオン/オフを手動で切り替えてみました。エミュレーター用に新しいマシュマロイメージをセットアップしようとしましたが、うまくいきませんでした。

8
WindRider

データのクリア([設定]> [アプリ]> [アプリ]> [ストレージ]> [データのクリア])とアプリのアンインストールの両方で、このフラグのステータスがクリアされ、アプリのランタイム権限に関連する他のすべてがクリアされます。

この動作は、Android 6.0、 このサンプルアプリ を介して)を実行しているNexus5でテストされました。

これの手動オプションをどこかで見たことを思い出しているようですが、今は見つかりません。これは、M Developer Previewリリースに存在し、最終6.0リリースでプルされたものである可能性があります。

8
CommonsWare

アプリの設定からデータをクリアすることで、それを「忘れる」ことができます。

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で完全な実装に答えました。

4
Nabin Bhandari

それを見つけた:

システム設定>アプリ>アプリ設定のリセット(メニュー内)

enter image description here

3
WindRider

https://www.youtube.com/watch?v=F8hQfmYTEaQ

[設定]-> [アプリのアクセス許可]領域で、アクセス許可を手動で有効または無効にする必要があります。

私はこのページで与えられたすべての提案を試しました。それらのどれも機能しませんでした。手動で有効または無効にすると、ダイアログボックスが返されました。

上記のYouTube投稿をクリックして、これが正解であることを確認してください

0
me_
@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())));
        }
    }
}
0
Ketan Ramani

私のために働いた唯一の解決策は:

  1. アプリの権限に移動します
  2. すべての権限を有効または無効にします

その後、「二度と尋ねない」という選択を忘れます。

App permissions list

あなたはこのビデオでそれをチェックすることができます https://www.youtube.com/watch?v=F8hQfmYTEaQ

0
Dawit Abraham