私は、recyclerview と、recyclerview アダプターを使用してこの recyclerview にデータを設定するフラグメントを持っています。
現在、アダプタのリスト項目にボタンがあり、それをクリックして、Android の新しい権限モデルについて Android の 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 メソッドを呼び出したいです。どうすればいいでしょうか? ここで何か間違ったことをしているのでしょうか。誰かアイデアがあれば助けてください。
ベストアンサー1
より広範な問題をカバーするために回答を編集しました
フラグメントとアクティビティのメソッドを混同していると思います。先月、私のプロジェクトで同様の問題が発生しました。最終的に次のようになっているかどうかを確認してください。
- AppCompatActivityでは、 ActivityCompat.requestpermissionsメソッドを使用します。
- v4サポートフラグメントではrequestpermissionsを使用する必要があります
- 注意すべき点は、フラグメント内で AppcompatActivity.requestpermissions を呼び出すと、コールバックはフラグメントではなくアクティビティに来ることです。
- 必ず
super.onRequestPermissionsResult
アクティビティの から呼び出してくださいonRequestPermissionsResult
。
役に立つかどうか確認してください。