2017-04-13 23 views
0

私は、ExportPassionResultクラスがextends AlertDialog、さらにimplements ActivityCompat.OnRequestPermissionsResultCallbackというExportDialogクラスを持っています。私は、ExportDialogクラス内で許可を要求しています。onRequestPermissionsResultはAlertDialogクラスで呼び出されません

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

許可はマニフェストにも含まれています。

ただし、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

アミールありがとう!それはトリックでした! –

関連する問題