我试图获得棉花糖的存储权限。一切似乎都很好,我可以授予或拒绝许可。运行时权限:授权后立即没有权限
private static final int REQUEST_STORAGE = 1;
// request storage permission
private void requestStoragePermission() {
String[] permissions = new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE };
if (!hasStoragePermission()) {
Log.e(TAG, "No storage permission at the moment. Requesting...");
ActivityCompat.requestPermissions(this, permissions, REQUEST_STORAGE);
} else
Log.e(TAG, "We already have storage permission. Yay!");
}
// check is storage permission granted
private boolean hasStoragePermission() {
String storagePermission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
int hasPermission = ContextCompat.checkSelfPermission(this, storagePermission);
return (hasPermission == PackageManager.PERMISSION_GRANTED);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_STORAGE:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.e(TAG, "Storage permission granted");
} else {
Log.e(TAG, "Storage permission denied");
Toast.makeText(getApplicationContext(), getString(R.string.no_storage_permission), Toast.LENGTH_SHORT).show();
}
break;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
但问题出在这里。当我第一次使用此功能时,即使在授予权限后,hasStoragePermission()
也始终为false。当我不得不使用上下文菜单两次以获得我想要的权限之前,未授予权限。这是不可接受的。
// some code...
// even more code...
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case ID_CONTEXT_MENU_SAVE_IMAGE:
// in order to save anything we need storage permission
requestStoragePermission();
Log.e("SomeActivity", "storagePermissionGranted: " + hasStoragePermission());
if (!hasStoragePermission())
return false;
saveImageToDisk(mPendingImageUrlToSave);
break;
}
return super.onContextItemSelected(item);
}
Android Marshmallow有没有任何已知的错误可能导致它?代码似乎没问题,因为实际上我可以授予/拒绝存储权限。我想立即拥有它。
我的问题的唯一解决方案就是把'if(mPendingImageUrlToSave!= null){saveImageToDisk(mPendingImageUrlToSave); mPendingImageUrlToSave = null; }'授予'onRequestPermissionsResult' - >权限。这是微不足道的,它可能是首选的方式。但令人讨厌的是,许可不会立即被授予... – koras
以及将相同的'requestStoragePermission()' – koras