1. ホーム
  2. android

[解決済み] Android M パーミッション : shouldShowRequestPermissionRationale()関数の使用方法について混乱しています。

2022-01-28 04:21:16

質問事項

Android M の新しいアクセス許可モデルに関する公式ドキュメントを読んでいました。 shouldShowRequestPermissionRationale() を返す関数です。 true アプリが以前にこのパーミッションを要求し、ユーザーがその要求を拒否した場合。ユーザーが過去にパーミッションの要求を拒否し、Don't ask againオプションを選択した場合、このメソッドは以下を返します。 false .

しかし、次の2つのケースはどのように区別すればいいのでしょうか。

ケース1 : アプリがパーミッションを持っておらず、ユーザーが以前にパーミッションを要求されたことがない場合。この場合、ユーザーに初めて尋ねるので、shouldShowRequestPermissionRationale()はfalseを返します。

ケース2 : この場合もshouldShowRequestPermissionRationale()はfalseを返します。

ケース2の場合、アプリの設定画面にユーザーを送りたいのですが、どうすればいいですか?この2つのケースを区別するには、どうすればよいのでしょうか?

どのように解決するのですか?

Mプレビュー1以降で、ダイアログが表示された場合 初めて はありません。 二度と聞かない のチェックボックスがあります。

ユーザが許可要求を拒否した場合、その旨を知らせるメッセージが表示されます。 二度と問い合わせない 許可ダイアログのチェックボックス 二度目 の許可が必要です。

だから、ロジックはこうでなければならない。

  1. パーミッションを要求する。

    if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
    } else {
        //Do the stuff that requires permission...
    }
    
    
  2. で拒否されたか許可されたかをチェックします。 onRequestPermissionsResult .

    以前、パーミッションが拒否された場合、今度は 二度と問い合わせない のチェックボックスが表示されます。

    コール shouldShowRequestPermissionRationale をチェックしたかどうかを確認するために、ユーザが 二度と聞かない . shouldShowRequestPermissionRationale を選択した場合のみ、メソッドは false を返します。 二度と問い合わせない またはデバイスポリシーによってアプリがその許可を持つことが禁止されています。

    if (grantResults.length > 0){
        if(grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            //Do the stuff that requires permission...
        }else if (grantResults[0] == PackageManager.PERMISSION_DENIED){
            // Should we show an explanation?
            if (ActivityCompat.shouldShowRequestPermissionRationale(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                //Show permission explanation dialog...
            }else{
                //Never ask again selected, or device policy prohibits the app from having that permission.
                //So, disable that feature, or fall back to another situation...
            }
        }
    }
    
    

そのため、ユーザーが 二度と聞かない を使用するかどうか。