11

Sto provando a creare una semplice app in grado di ottenere un'immagine dall'app Galleria e visualizzarla su un imageButton. Sto testando con l'API 21 su un telefono con Android 5.0.1. Sfortunatamente, qualunque cosa provi, continuo a ricevere un errore di sicurezza, anche quando specifichi le autorizzazioni.Android READ_EXTERNAL_STORAGE permesso non funzionante

Il mio codice per ottenere il recupero l'immagine è:

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

Il codice funziona quando cerco di selezionare un'immagine da Dropbox, ma quando seleziono un'immagine dalla galleria, ottengo

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() 

ho fatto il tag uso-permesso per READ_EXTERNAL_STORAGE un bambino di manifesti:

<?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 Ho cercato in alto e in basso su altri post, ma ancora non riesco a capire perché sto ancora ricevendo questo errore fastidioso.

+1

Leggi questo http://stackoverflow.com/questions/21196453/external-storage-permission-issue-with-mediaprovider-ring-tones o http://stackoverflow.com/questions/19837358/android-kitkat- securityexception-when-trying-to-read-from-mediastore –

risposta

13

PROBLEMA
tuo hanno l'errore

java.lang.SecurityException: Autorizzazione Denial: com.android.providers lettura .media.MediaProvider uri content: // media/external/images/media/35634 da pid = 25240, uid = 10070 r equires android.permission.READ_EXTERNAL_STORAGE o gra ntUriPermission().

CAUSA
non stanno dando i permessi correttamente a causa di android:maxSdkVersion="18", che secondo la documentazione.

Il più alto livello API a cui questa autorizzazione deve essere concessa per la tua app. L'impostazione di questo attributo è utile se l'autorizzazione richiesta dalla tua app non è più necessaria a partire da un determinato livello API.

Finché non ha dato i permessi per API 21 la vostra applicazione si sta comportando bene.

Verificare this topic per ulteriori informazioni.

SOLUZIONE
Se si vuole dare autorizzazioni di lettura sottoAPI 21, è necessario dichiarare come:

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

IMPORTANTE:

Th ha senso solo quando è necessario fornire autorizzazioni extra perché alcune vecchie API richiedono autorizzazioni che le nuove versioni non richiedono, quindi l'esperienza utente viene migliorata perché si richiedono determinate autorizzazioni solo quando necessario.


Quindi (in questo caso) il modo corretto sarà:

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

Add On
Se si desidera salvare i dati è necessario aggiungere WRITE_EXTERNAL_STORAGE permessi.

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

Giuro che non funzionava la scorsa notte quando ho provato il permesso senza strumenti e maxsdk, e ora qui sta collaborando come se nulla fosse mai successo. Grazie mille! – Zheryu

+0

Felice di aiutare;) –

2

sufficiente sostituire con il sotto uno e cercare,

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

non funziona – Karoly

1

Durante il debug su alcuni dispositivi è necessario concedere l'autorizzazione esplicitamente andando in impostazioni -> applicazioni -> my_application -> Autorizzazioni e quindi concedere autorizzazioni necessarie.

Problemi correlati