2016-10-30 7 views
0

実行時にリクエストのアクセス許可が実装されましたが、アクセス許可が必要なメソッドを呼び出すタイミングがわかりません。アクセス許可取得Android APIレベルでのイベント処理

ユーザーが許可ダイアログで「はい」ボタンを押して時間を必要とするので、私はすぐにメソッドを呼び出すことはできません。

onPermissionsObtainedイベントを処理するために非常に有用であろうが、私はそれへの同様のを見つけることができません。

これに対処するにはどうすればよいですか?

を例

private void startBuildInCameraActivity(View v) { 

    if ((ContextCompat.checkSelfPermission(getActivity(), 
      Manifest.permission.CAMERA) 
      != PackageManager.PERMISSION_GRANTED) || 
      (ContextCompat.checkSelfPermission(getActivity(), 
        Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED)) { 
     requestPermissions(); 


     //TODO init onPermissionObtained event handler here instead "return" 
     return; 
    } 

    startCamera(); 
} 

のための私のコードを参照してください問題は、ユーザーは、彼が権限を持っていない場合は二回startBuildInCameraActivityを呼び出す必要があります。それ以外の場合、startCamera()は決して呼び出されません。

+1

アクセス権が必要な場合は、 'startBuildInCameraActivity()'メソッドで、 'onRequestPermissionsResult()'では 'startCamera()'を呼び出す必要があります。あなたがそれを見逃してしまった場合、ランタイムアクセス許可についての良い[記事](https://developer.android.com/training/permissions/requesting.html)があります。 – Drez

答えて

0

おかげで、@Drez 21 ソリューションは、クラスが、その後FragmentCompat.OnRequestPermissionsResultCallbackを実装して作ることです:

private void startBuildInCameraActivity(View v) { 

    if ((ContextCompat.checkSelfPermission(getActivity(), 
      Manifest.permission.WRITE_EXTERNAL_STORAGE) 
      != PackageManager.PERMISSION_GRANTED)) { 
     requestPermissions(); 
    } else { 
     startCamera(); 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, 
             @NonNull int[] grantResults) { 

    if (grantResults.length != 1 || grantResults[0] != PackageManager.PERMISSION_GRANTED) { 
     ErrorDialog.newInstance(getString(R.string.permissions_needs)) 
       .show(getChildFragmentManager(), FRAGMENT_DIALOG); 
    } else { 
     startCamera(); 
    } 
} 

This classはすでに、この動作を実装しています - 例えばそれを使用しています。

関連する問題