[解決済み] Android M パーミッション : shouldShowRequestPermissionRationale()関数の使用方法について混乱しています。
質問事項
Android M の新しいアクセス許可モデルに関する公式ドキュメントを読んでいました。
shouldShowRequestPermissionRationale()
を返す関数です。
true
アプリが以前にこのパーミッションを要求し、ユーザーがその要求を拒否した場合。ユーザーが過去にパーミッションの要求を拒否し、Don't ask againオプションを選択した場合、このメソッドは以下を返します。
false
.
しかし、次の2つのケースはどのように区別すればいいのでしょうか。
ケース1 : アプリがパーミッションを持っておらず、ユーザーが以前にパーミッションを要求されたことがない場合。この場合、ユーザーに初めて尋ねるので、shouldShowRequestPermissionRationale()はfalseを返します。
ケース2 : この場合もshouldShowRequestPermissionRationale()はfalseを返します。
ケース2の場合、アプリの設定画面にユーザーを送りたいのですが、どうすればいいですか?この2つのケースを区別するには、どうすればよいのでしょうか?
どのように解決するのですか?
Mプレビュー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... }
-
で拒否されたか許可されたかをチェックします。
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... } } }
そのため、ユーザーが 二度と聞かない を使用するかどうか。
関連
-
[解決済み】Androidエミュレータのエラーメッセージ。"PANIC: Missing emulator engine program for 'x86' CPUS." (パニック: エミュレータ・エンジン・プログラムがありません)
-
[解決済み】アンドロイドクロームブラウザのモバイルウェブアプリケーションのメニューでHTMLユニコード ☰が検出されない。
-
[解決済み] [Solved] Error "File google-services.json is missing from module root folder. これがないとGoogle Services Pluginは機能しません" [重複]。
-
[解決済み】カメラサービスへの接続に失敗しました。
-
[解決済み] Xlint:deprecationを使用して再コンパイルする方法
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] 複数のデバイスを接続しているときにADB Shellを使用するには?error: more than one device and emulator "で失敗します。
-
[解決済み] Android: @drawable/picture を drawable に変換するのに失敗しました。
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】OnFragmentInteractionListenerを実装する方法
-
[解決済み】シンボル 'AppCompatActivity' を解決できない。
-
[解決済み】apkインストール時のINSTALL_FAILED_NO_MATCHING_ABIS
-
[解決済み】フラグメントMyFragmentがアクティビティにアタッチされない。
-
[解決済み】SDKの場所がandroid studioで見つからない。
-
[解決済み】Couldn't load memtrack module Logcat Error
-
[解決済み] サポートされていないメソッドです。BaseConfig.getApplicationIdSuffix()がサポートされていません。
-
[解決済み] SDKの場所がandroid studioで見つからない
-
[解決済み] エラー - Android リソースのリンクに失敗しました (AAPT2 27.0.3 Daemon #0)
-
[解決済み] Android SDK の場所には空白を含めないでください。NDK ツールで問題が発生するためです。