L'autorisation Android READ_EXTERNAL_STORAGE ne fonctionne pas
Je suis en train de créer une application simple qui peut obtenir une image de la Galerie de l'application et de l'afficher sur un imageButton. Je suis en essais avec l'API 21 sur un téléphone sous Android 5.0.1. Malheureusement, peu importe ce que j'essaie, je reçois une erreur de sécurité - même quand je spécifier les autorisations.
Mon code pour obtenir la récupération de 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 quand j'essaie de sélectionner une image à partir de 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 permission de balise 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 posts, mais encore n'arrive pas à comprendre pourquoi je suis encore en train de ce fichus d'erreur.
source d'informationauteur Zheryu
Vous devez vous connecter pour publier un commentaire.
PROBLÈME
Vous avez l'erreur
CAUSE
Vous ne vous donnez pas correctement les autorisations en raison de
android:maxSdkVersion="18"
, qui, selon la documentation.Tant que vous n'avez pas de donner des autorisations à
API 21
votre application se comporte ok.Vérifier cette rubrique pour plus d'infos.
SOLUTION
Si vous voulez donner des autorisations de lecture sous
API 21
, vous devez les déclarer comme:IMPORTANT:
Cela n'a de sens que lorsque vous avez besoin de donner des autorisations supplémentaires parce que certains anciens de l'api de nécessiter des autorisations que les nouvelles versions ne l'est pas, si l'expérience utilisateur est améliorée parce que vous demandez seulement pour certaines autorisations en cas de besoin.
(Dans ce cas) la façon correcte sera:
AJOUTER SUR
Si vous souhaitez enregistrer les données, vous devez ajouter
WRITE_EXTERNAL_STORAGE
autorisations.Il suffit de remplacer avec le ci-dessous, et d'essayer,
Lors du débogage sur certains appareils, vous devez accorder l'autorisation explicitement en allant dans vos paramètres --> apps --> MON_APPLICATION --> les Autorisations et puis accorder les autorisations requises.
En ajoutant la ci-dessous en AndroidManifest.xml
nous avons aussi besoin de demander la permission à l'activité de l'application pour avoir accès à un stockage externe. https://developer.android.com/training/permissions/requesting.html