android - 在棉花糖中授予运行时权限后如何通知recyclerview适配器

标签 android android-permissions android-6.0-marshmallow

我有一个 Activity ,我正在加载一个 fragment 。我正在使用 recyclerviewadapter 在 recyclerview 中加载此 fragment 中的数据。

在 Recyclerview 适配器中,单击某个按钮我需要以下权限:

READ_EXTERNAL_STORAGE

为此,我已请求使用以下代码授予权限
public void checkPermission(){

    if (ContextCompat.checkSelfPermission(mContext,
            Manifest.permission.READ_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED) {

        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale((Activity)mContext,
                Manifest.permission.READ_EXTERNAL_STORAGE)) {
            // Show an expanation to the user *asynchronously* -- don't block
            // this thread waiting for the user's response! After the user
            // sees the explanation, try again to request the permission.

            ActivityCompat.requestPermissions((Activity)mContext,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                    ConstantVariables.READ_EXTERNAL_STORAGE);
        } else {
            // No explanation needed, we can request the permission.
            ActivityCompat.requestPermissions((Activity)mContext,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                    ConstantVariables.READ_EXTERNAL_STORAGE);

            // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
            // app-defined int constant. The callback method gets the
            // result of the request.
        }
    }
}

依次调用以下方法
@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, yay! Do the
                // contacts-related task you need to do.

            } else {
                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            break;

        default:
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

现在我如何通知我的适配器已授予权限,现在我可以继续我的任务。

我可以从 checkPermission() 方法返回任何 bool 变量,如果授予或不授予权限,它将返回 true/false,以便在适配器中我可以检查这个变量并可以继续我的任务。

如果有人在这里有任何想法,请帮助我。

非常感谢先进。

最佳答案

你的问题不够清楚。但是,如果您要实现的是授予运行时权限 OnClick 适配器类中的按钮,请尝试以下操作:
在您的适配器类中,创建一个接口(interface),例如

public interface WillReceiveClickFromFragment {
    void receiveClick();
}
现在,仍然在您的适配器类中创建接口(interface)类型的变量“WillReceiveClickFromFragment”并将其传递给您的适配器类构造函数
private WillReceiveClickFromFragment willReceiveClickFromFragment;

public YourAdapterClassConstructor(..., WillReceiveClickFromFragment willReceiveClickFromFragment){
    this.willReceiveClickFromFragment = willReceiveClickFromFragment;
}
最后,在您执行单击操作的适配器类内的按钮中,将其放入您的 OnClickListener
yourButton.setOnClickListener(v -> {
    WillReceiveClickFromFragment.receiveClick();
});
现在在你的 Fragment 类中,实现你刚刚在适配器类中创建的接口(interface)并重写接口(interface)方法
public class YourFragmentClassName extends Fragment implements YourAdapterClassName.WillReceiveClickFromFragment {

                  ...

    @Override
    public void receiveClick(){
        /*call your check permisson method here*/
        checkPermission();
    }
}

关于android - 在棉花糖中授予运行时权限后如何通知recyclerview适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35916892/

相关文章:

java - PHP 的 md5(str, true) 等价于什么?

单个对话框中的 Android 多个运行时权限

android - 如何从 codename1 应用程序中删除 "permission required"

android - 如何从 Android Marshmallow 中的图库获取图像?

android - Viewflipper 动画在第一次滑动时不起作用

android - 如何在 fragment 内的对象中实现 onDragListener?

Android 仅使用支持库中的 ViewPager

Android 6.0 Marshmallow (API 23) 中弃用了 AndroidHttpClient 和 HttpGet API

android - 打盹/待机功能如何影响位置更新?

android - 如何从打瞌睡模式中选择退出应用程序?