我有一个类,即ExportDialog,extends AlertDialog
和implements ActivityCompat.OnRequestPermissionsResultCallback
。我通过调用
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 { ... }
提前感谢您的帮助!
答案 0 :(得分:1)
你不能把它放在警告对话框中。您必须将其移动到创建对话框的活动中。
我不知道exportCategory()
应该做什么,但也许你可以在对话框中将其公开为静态,或者将其移动到另一个单独的静态类,然后从你的活动中调用它。
如果该函数依赖于您的警报对话框,那么您需要在活动中保留对警报对话框的引用,然后使用该警报对话框实例调用该函数(Uncaught TypeError: Cannot read property 'value' of null
)。