実行時アクセス許可を使用するようにアプリケーションを設定しようとしています。要求ダイアログに問題はないが、ダイアログで "Accept"を選択すると、onRequestPermissionsResultが呼び出され、grantResultsはPERMISSION_GRANTEDを表示せず、アプリケーションはアクセス権を取得しない。ここで私は許可を要求しています方法です:Androidの実行時のアクセス許可 - ユーザーがアクセス許可を許可し、それをonRequestPermissionsResultで受信しない
ActivityCompat.requestPermissions((Activity) contnext,
new String[]{Manifest.permission.MANAGE_DOCUMENTS, Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
とコールバック:
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode){
case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE:
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// do good stuff
Log.i("net.bradmont.prayson", "Permissions granted by user");
} else {
Log.i("net.bradmont.prayson", "Permissions refused by user");
Log.i("net.bradmont.prayson", "grantResults.length " + grantResults.length);
for (int i = 0; i < grantResults.length; i++){
Log.i("net.bradmont.prayson", "grantResults[" + i +"]" + grantResults.length);
}
Snackbar snackbar1 = Snackbar.make(mCoordinator,
R.string.cant_open_file_no_permission, Snackbar.LENGTH_LONG);
snackbar1.show();
}
}
}
結果は、権限ダイアログを受け入れた後、アプリがエラースナックバーを示すことです。 logcatに表示される内容は次のとおりです。
net.bradmont.prayson I Permissions refused by user
I grantResults.length 2
I grantResults[0]2
I grantResults[1]2
grantResultsには2つの意味があります。 PackageManagerのドキュメントでCOMPONENT_ENABLED_STATE_DISABLEDとGET_RECEIVERSの値が2のconstのみが使用されます。
ここでは何が起こっていますか?
:
かいつまんでは、
MANAGE_DOCUMENTS
要求を取り除きます。 – CommonsWare