2016-04-19 7 views
-1

Ich habe eine Anwendung erstellt, die meine Galerie öffnet, wenn ich auf eine Schaltfläche klicke, wenn ich ein Bild auswähle, das ich auf meinem Bildschirm anzeigen möchte, aber wenn ich ein Foto wähle, bekomme ich eine Laufzeit sagenjava.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() 

My-Code ist als Brachen

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

Haben Sie den Fehler gelesen? – tyczj

Antwort

2

Sie

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

unter derhinzufügen müssenTag in Ihrer Manifest-Datei

+0

... oder 'grantUriPermission()' –

1

Ist dies auch auf Android 6.0 passiert? Dann müssen Sie auch für Laufzeitberechtigungen gehen. Pre Eibisch -

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

Eibisch und höher (Targeted SDK) - Sie sollten überprüft werden, wenn der Benutzer über die Berechtigung der externen Speicher erteilt hat, unter Verwendung von:

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

dann Ihre Aktivität machen implementieren 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

Sie müssen die Berechtigung in der Manifestdatei hinzufügen unter der Zeile im Manifest-Tag hinzufügen manifest