1. ホーム
  2. android

[解決済み] フラグメントとアクティビティの両方で定義されている場合、フラグメントで onRequestPermissionsResult が呼び出されない。

2022-02-09 14:28:03

質問

リサイクルビューを作成し、リサイクルビューアダプタを使用してリサイクルビューにデータを設定するフラグメントがあります。

今、私はアダプタのリストアイテムでボタンを持っているクリックすると、私はアンドロイドの新しい許可モデルのためにアンドロイドの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のメソッドを混同しているのではないでしょうか。先月、私のプロジェクトでも同じような問題がありました。最終的に以下のようになったかどうか確認してください。

  1. AppCompatActivity でメソッドを使用します。 ActivityCompat.requestpermissions
  2. v4 サポートフラグメントでは リクエストパーミッション
  3. キャッチは、フラグメントでAppcompatActivity.requestpermissionsを呼び出すと、コールバックはフラグメントではなく、アクティビティに来ることです。
  4. 必ず super.onRequestPermissionsResult アクティビティから onRequestPermissionsResult .

それが役に立つかどうか見てください。