11

Ich versuche, eine einfache App zu erstellen, die ein Bild aus der Galerie-App abrufen und auf einem imageButton anzeigen kann. Ich teste mit API 21 auf einem Telefon mit Android 5.0.1. Leider bekomme ich immer einen Sicherheitsfehler, auch wenn ich die Berechtigungen festlege.Android READ_EXTERNAL_STORAGE-Berechtigung funktioniert nicht

Mein Code für das Erhalten des Bildwiedergewinnungs ist:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent){ 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode){ 
     case PICK_IMAGE_REQUEST: 
      if(resultCode == RESULT_OK && imageReturnedIntent != null && imageReturnedIntent.getData() != null) { 
       Uri uri = imageReturnedIntent.getData(); 
       try { 
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 
        // Log.d(TAG, String.valueOf(bitmap)); 
        ImageButton ib = (ImageButton) findViewById(R.id.inputImg); 
        ib.setImageBitmap(bitmap); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      break; 
    } 
} 

Der Code funktioniert, wenn ich versuche, ein Bild von Dropbox zu wählen, aber wenn ich ein Bild aus der Galerie auswählen, bekomme ich

java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/35634 from pid=25240, uid=10070 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 

ich habe den Verwendungserlaubnis-Tag für READ_EXTERNAL_STORAGE ein Kind manifestieren:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
package="[REDACTED]"> 

    <uses-sdk 
    android:minSdkVersion="14" 
    android:targetSdkVersion="23" /> 

    <uses-permission tools:node="replace" android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> 

    <application> 
     [REDACTED] 
    </application> 

</manifest> 

I Ich habe auf anderen Posts immer und immer wieder gesucht, kann aber immer noch nicht herausfinden, warum ich immer noch diesen lästigen Fehler bekomme.

+1

Lesen Sie diese http://stackoverflow.com/questions/21196453/externe-storage-permission-issue-with-mediaprovider-ringtones oder http://stackoverflow.com/questions/19837358/android-kitkat- securityexception-when-trying-to-read-from-mediastore –

Antwort

13

PROBLEM
Ihr haben den Fehler

java.lang.SecurityException: Permission Denial: Lesen com.android.providers .media.MediaProvider uri Inhalt: // media/external/images/media/35634 von pid = 25240, uid = 10070 r equires android.permission.READ_EXTERNAL_STORAGE, oder gra ntUriPermission().

Ursache
Sie nicht korrekt geben Berechtigungen wegen android:maxSdkVersion="18", die Dokumentation nach.

Die höchste API-Ebene, auf der diese Berechtigung für Ihre App gewährt werden soll. Das Festlegen dieses Attributs ist hilfreich, wenn die Berechtigung, die für Ihre App erforderlich ist, ab einer bestimmten API-Ebene nicht mehr benötigt wird.

Solange Sie nicht Berechtigungen API 21 App ok verhält geben hat.

Überprüfen Sie this topic für weitere Informationen.

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

WICHTIG:

SOLUTION
Wenn Sie unterAPI 21 Leseberechtigungen will geben, müssen Sie sie als erklären

Th ist nur sinnvoll, wenn Sie zusätzliche Berechtigungen erteilen müssen, da einige alte APIs Berechtigungen erfordern, die neue Versionen nicht haben, sodass die Benutzererfahrung verbessert wird, da Sie bei Bedarf nur nach bestimmten Berechtigungen fragen. So


(in diesem Fall) der richtige Weg sein wird:

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

ADD ON
Wenn Sie Daten speichern möchten, müssen Sie WRITE_EXTERNAL_STORAGE Berechtigungen hinzufügen.

<uses-permission 
    android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

Ich schwöre, dass es letzte Nacht nicht funktionierte, als ich die Erlaubnis ohne Werkzeuge und maxsdk ausprobierte, und jetzt hier kooperiert, wie nichts jemals passiert ist. Ich danke dir sehr! – Zheryu

+0

Gut zu helfen;) –

2

einfach mit dem unten ersetzen und versuchen,

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

funktioniert nicht – Karoly

1

Während das Debuggen auf einigen Geräten Sie die Erlaubnis, indem Sie auf Ihre Einstellungen explizit gewähren müssen -> Anwendungen -> my_application -> Berechtigungen und dann erforderlichen Berechtigungen zu erteilen.