如果在片段和活动中都定义了 onRequestPermissionsResult,则不会在片段中调用 onRequestPermissionsResult

2023-11-23

我有一个片段,其中有 recyclerview 并使用 recyclerview 适配器在此 recyclerview 中设置数据。

现在,我在适配器的列表项中有一个按钮,单击该按钮我需要检查 android 中的 READ_EXTERNAL_STORAGE 权限以获取 android 中的新权限模型。

我在此适配器的片段中创建了一个新函数来检查是否授予权限,如果尚未授予则请求权限。

我已将 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
  2. 在 v4 支持片段中,您应该使用请求权限
  3. 问题是,如果您在片段中调用 AppcompatActivity.requestpermissions 那么回调将到达活动而不是片段
  4. 请务必致电super.onRequestPermissionsResult从活动的onRequestPermissionsResult.

看看是否有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果在片段和活动中都定义了 onRequestPermissionsResult,则不会在片段中调用 onRequestPermissionsResult 的相关文章

随机推荐