【问题标题】:java.lang.SecurityException:java.lang.SecurityException:
【发布时间】:2016-04-19 16:19:17
【问题描述】:

我创建了一个应用程序,当我点击一个按钮时打开我的画廊,当我选择一个我希望它显示在我的屏幕上的图像但是当我选择一张照片时我希望我得到一个运行时说

 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);
}

【问题讨论】:

  • 你读过错误吗?

标签: java android android-studio android-gallery


【解决方案1】:

你需要添加

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

在清单文件中的 &lt;manifest&gt; 标记下

【讨论】:

  • ... 或 grantUriPermission()
【解决方案2】:

这是否也发生在 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
    }
}

【讨论】:

    【解决方案3】:

    您必须在清单文件中添加权限在清单标记中添加以下行 显现

    【讨论】:

      猜你喜欢
      • 2017-12-26
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 2019-03-18
      • 2016-05-22
      相关资源
      最近更新 更多