2016-04-19 3 views
-1

Я создал приложение, которое открывает мою галерею, когда я нажимаю кнопку, когда я выбираю изображение, которое я хочу, чтобы оно отображалось на моем экране, однако, когда я выбираю фотографию, я хочу, чтобы я получил сообщение о времени выполненияjava.lang.SecurityException:

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

Вы даже прочитали ошибку? – tyczj

ответ

2

вам нужно добавить

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

под <manifest> тег в вашем файле манифеста

+0

... или 'grantUriPermission()' –

1

Это тоже происходит на android 6.0? Тогда вам также придется использовать разрешения на выполнение. Pre зефир -

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> in the android manifest file. 

Зефир и выше (Targeted 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; 
    } 
} 

Затем сделайте вашу деятельность Внедрение 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 
    } 
} 
0

Вы должны добавить разрешение в файл манифеста добавить строку ниже в теге манифеста manifest

Смежные вопросы