在AlertDialog类中不会调用onRequestPermissionsResult

时间:2017-04-13 03:40:56

标签: android android-permissions android-dialog

我有一个类,即ExportDialog,extends AlertDialogimplements ActivityCompat.OnRequestPermissionsResultCallback。我通过调用

请求ExportDialog类中的权限
ActivityCompat.requestPermissions(getOwnerActivity(),
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);

该权限也包含在清单中。

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

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

我检查了一些像this这样的帖子,这对我的问题没有帮助,因为我的课程扩展了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();
            }
        }
    }
}

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

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

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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

我不知道exportCategory()应该做什么,但也许你可以在对话框中将其公开为静态,或者将其移动到另一个单独的静态类,然后从你的活动中调用它。

如果该函数依赖于您的警报对话框,那么您需要在活动中保留对警报对话框的引用,然后使用该警报对话框实例调用该函数(Uncaught TypeError: Cannot read property 'value' of null)。