[解決済み] フラグメントとアクティビティの両方で定義されている場合、フラグメントで onRequestPermissionsResult が呼び出されない。
質問
リサイクルビューを作成し、リサイクルビューアダプタを使用してリサイクルビューにデータを設定するフラグメントがあります。
今、私はアダプタのリストアイテムでボタンを持っているクリックすると、私はアンドロイドの新しい許可モデルのためにアンドロイドのREAD_EXTERNAL_STORAGE権限を確認する必要があります。
このアダプタのフラグメントに新しい関数を作成して、パーミッションが付与されているかどうかをチェックし、まだ付与されていない場合はパーミッションを要求するようにしました。
アダプタのパラメータとして MyFragment.this を渡し、アダプタのボタンクリックでフラグメントのメソッドを呼び出しています。
フラグメントでrequestPermissionを呼び出すには、以下のコードを使用しました。
if(ContextCompat.checkSelfPermission(mContext, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
ConstantVariables.READ_EXTERNAL_STORAGE);
}
をオーバーライドしました。
onRequestPermissionsResult
メソッドを使用しています。
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case ConstantVariables.READ_EXTERNAL_STORAGE:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, proceed to the normal flow.
startImageUploading();
} else {}
しかし、このActivityのonRequestPermissionsResultメソッドが呼び出されるのではなく、このメソッドが呼び出されるのです。
フラグメントの親アクティビティにも同じonRequestPermissionsResultメソッドを定義しており、それは呼び出されています。
アクティビティのonRequestPermissionsResultメソッドを削除することはできませんが、フラグメントに許可を要求するときにフラグメントのonRequestPermissionsResultメソッドを呼び出したいのですが、可能ですか? これはどのように行うことができますか?私はここで何か間違ったことをしているのでしょうか?
解決方法は?
より広範な問題をカバーするために、回答を編集しました。
fragmentとactivityのメソッドを混同しているのではないでしょうか。先月、私のプロジェクトでも同じような問題がありました。最終的に以下のようになったかどうか確認してください。
- AppCompatActivity でメソッドを使用します。 ActivityCompat.requestpermissions
- v4 サポートフラグメントでは リクエストパーミッション
- キャッチは、フラグメントでAppcompatActivity.requestpermissionsを呼び出すと、コールバックはフラグメントではなく、アクティビティに来ることです。
-
必ず
super.onRequestPermissionsResult
アクティビティからonRequestPermissionsResult
.
それが役に立つかどうか見てください。
関連
-
[解決済み】Looper.prepare()を呼び出していないスレッド内でハンドラを作成できない。)
-
[解決済み】android.content.ActivityNotFoundException: 明示的なアクティビティクラスを見つけることができません。
-
[解決済み】sendUserActionEvent()がnullである。
-
[解決済み】アクティビティにない場所でのgetLayoutInflater()の呼び出し
-
[解決済み] エラー - Android リソースのリンクに失敗しました (AAPT2 27.0.3 Daemon #0)
-
[解決済み] SDKの場所がandroid studioで見つからない
-
[解決済み] android.support.design.widget.FloatingActionButton クラスの展開に失敗しました。
-
[解決済み] FragmentでonActivityResultが呼び出されない
-
[解決済み] ViewPagerとフラグメント - フラグメントの状態を保存する正しい方法は何ですか?
-
[解決済み】Android Mのパーミッション:onRequestPermissionsResult()が呼び出されない件
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】react-native: コマンドが見つかりません。
-
[解決済み】Edit Textのandroid:ems属性とは何ですか?[重複しています]
-
[解決済み】OnFragmentInteractionListenerを実装する方法
-
[解決済み】新しいAVDを作成すると、CPU/ABIフィールドに「システムイメージがインストールされていません」と表示される。
-
[解決済み】アクティビティにない場所でのgetLayoutInflater()の呼び出し
-
[解決済み】Couldn't load memtrack module Logcat Error
-
[解決済み] コンパイルした.apkを端末にインストールしようとするとINSTALL_FAILED_UPDATE_INCOMPATIBLEが表示される
-
[解決済み] AndroidのADBデバイスが不正に
-
[解決済み】Android Mのパーミッション:onRequestPermissionsResult()が呼び出されない件
-
[解決済み] Android 6.0 マルチパーミッション