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.
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" />
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.
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