2017-04-13 162 views
0

我有一個類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

回答

1

你不能把它放在一個警告對話框。您必須將其移至創建對話框的活動。

我不知道exportCategory()應該做什麼,但也許你可以在對話框中將其設爲公共靜態,或將它移動到另一個單獨的靜態類,然後從您的活動中調用它。

如果該函數依賴於警報對話框的對象,則需要在活動中持有對警報對話框的引用,然後使用該警報對話框實例調用該函數(exportCategory())。

+0

謝謝阿米爾!這就是訣竅! –

相關問題