web-dev-qa-db-fra.com

L'autorisation Android READ_EXTERNAL_STORAGE ne fonctionne pas

J'essaie de créer une application simple qui peut obtenir une image à partir de l'application Galerie et l'afficher sur un imageButton. Je teste avec API 21 sur un téléphone fonctionnant sous Android 5.0.1. Malheureusement, peu importe ce que j'essaie, je continue à avoir une erreur de sécurité, même lorsque je spécifie les autorisations.

Mon code pour récupérer l'image est:

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

Le code fonctionne lorsque j'essaie de sélectionner une image dans Dropbox, mais lorsque je sélectionne une image dans la galerie, je reçois

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

J'ai fait la balise use-permission pour READ_EXTERNAL_STORAGE un enfant de manifeste:

<?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>

J'ai cherché haut et bas sur d'autres articles, mais je n'arrive toujours pas à comprendre pourquoi je reçois toujours cette erreur embêtante.

12
Zheryu

Remplacez simplement par celui ci-dessous et essayez,

<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
2
r j

Lors du débogage sur certains appareils, vous devez explicitement accorder l'autorisation en accédant à vos paramètres -> applications -> MY_APPLICATION -> Autorisations, puis aux autorisations requises. 

1
vimalp015

En plus d'ajouter ce qui suit dans AndroidManifest.xml

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

nous devons également demander l'autorisation de l'activité pour que l'application ait réellement accès au stockage externe. https://developer.Android.com/training/permissions/requesting.html

0
Sridhar