java.lang.SecurityException:
java.lang.SecurityException:
我制作了一个应用程序,当我单击一个按钮时,当我 select 我希望它显示在我的屏幕上的图像时,但是当我 select 我想要的照片时,我得到一个运行时说
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/59 from pid=9364, uid=10055 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
我的代码是休闲的
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
System.out.println("Image Path : " + selectedImagePath);
img.setImageURI(selectedImageUri);
}
}
}
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
你需要添加
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
在清单文件的 <manifest>
标签下
android 6.0 也会出现这种情况吗?然后,您还必须获得运行时权限。 预棉花糖-
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> in the android manifest file.
Marshmallow及以上版本(目标SDK)-
您应该使用以下方法检查用户是否已授予外部存储权限:
public boolean haveStoragePermissions() {
if (Build.VERSION.SDK_INT >= 23) {
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
Log.v(TAG,"Permission is granted");
return true;
} else {
Log.v(TAG,"Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return false;
}
}
else { //permission is automatically granted on sdk<23 upon installation
Log.v(TAG,"Permission is granted");
return true;
}
}
然后让你的 activity 实现 OnRequestPermissionResult
-
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
//resume tasks needing this permission
}
}
您必须在清单文件中添加权限,在清单标记的下面一行添加
显现
我制作了一个应用程序,当我单击一个按钮时,当我 select 我希望它显示在我的屏幕上的图像时,但是当我 select 我想要的照片时,我得到一个运行时说
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/59 from pid=9364, uid=10055 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
我的代码是休闲的
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
System.out.println("Image Path : " + selectedImagePath);
img.setImageURI(selectedImageUri);
}
}
}
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
你需要添加
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
在清单文件的 <manifest>
标签下
android 6.0 也会出现这种情况吗?然后,您还必须获得运行时权限。 预棉花糖-
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> in the android manifest file.
Marshmallow及以上版本(目标SDK)- 您应该使用以下方法检查用户是否已授予外部存储权限:
public boolean haveStoragePermissions() {
if (Build.VERSION.SDK_INT >= 23) {
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
Log.v(TAG,"Permission is granted");
return true;
} else {
Log.v(TAG,"Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return false;
}
}
else { //permission is automatically granted on sdk<23 upon installation
Log.v(TAG,"Permission is granted");
return true;
}
}
然后让你的 activity 实现 OnRequestPermissionResult
-
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
//resume tasks needing this permission
}
}
您必须在清单文件中添加权限,在清单标记的下面一行添加 显现