onRequestPermissionsResult 未在 AlertDialog 中调用 class

onRequestPermissionsResult doesn't get called in AlertDialog class

我有一个 class、ExportDialog、extends AlertDialogimplements ActivityCompat.OnRequestPermissionsResultCallback。我通过调用

在 ExportDialog class 中请求许可
ActivityCompat.requestPermissions(getOwnerActivity(),
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);

权限也包含在清单中。

但是,当调用 ActivityCompat.requestPermissions 时,onRequestPermissionsResult 不会随权限请求的结果一起调用。

在模拟器中测试时,我可以看到正在执行权限请求,并且我能够成功启用或拒绝权限请求。只是永远不会调用 onRequestPermissionResult 中的代码。

我已经检查了一些帖子,例如 这对我的问题没有帮助,因为我的 class 扩展了 AlertDialog。

请求权限的代码片段:

if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(getOwnerActivity(),
                new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
        return false;
    }

onRequestPermissionResult 的代码片段:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                exportCategory();
            } else {
                Toast.makeText(getContext(), "Export functionality can't be carried out.", Toast.LENGTH_LONG).show();
            }
        }
    }
}

class 声明的代码片段(CustomDialog 扩展了 AlertDialog):

public class ExportDialog extends CustomDialog implements ActivityCompat.OnRequestPermissionsResultCallback { ... }

提前感谢您的帮助!

你不能把它放在警告对话框中。您必须将其移至创建对话框的 activity。

我不知道 exportCategory() 应该做什么,但也许你可以在你的对话框中将它设为静态 public 或将其移动到另一个单独的静态 class 然后从你的 activity.

of 如果该函数依赖于您的警报对话框对象,那么您需要在 activity 中保留对警报对话框的引用,然后使用该警报调用该函数 (exportCategory())对话框实例。