onRequestPermissionsResult不会在AlertDialog类中调用

问题描述:

我有一个类ExportDialog,即extends AlertDialogimplements ActivityCompat.OnRequestPermissionsResultCallback。我正在通过调用onRequestPermissionsResult不会在AlertDialog类中调用

ActivityCompat.requestPermissions(getOwnerActivity(), 
        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
        MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE); 

请求ExportDialog类中的许可权。此许可权也包含在清单中。

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

当在模拟器中进行测试,我可以看到正在执行的许可要求和我能够启用或成功地否认的许可要求。只是onRequestPermissionResult中的代码永远不会被调用。

我已经检查了几个像this职位,因为我的类继承AlertDialog反而不利于我的问题。

代码片段请求权限:为onRequestPermissionResult

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

代码片段:类声明的

@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 { ... } 

谢谢你提前帮助你!

+2

onRequestPermissionsResult方法仅在“父(活性)”执行在那里调用。 – sunita

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

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

如果该函数依赖于警报对话框的对象,则需要在活动中持有对警报对话框的引用,然后使用该警报对话框实例调用该函数(exportCategory())。

+0

谢谢阿米尔!这就是诀窍! –