Dans Lollipop, la fonctionnalité de téléchargement fonctionne correctement dans mon application, mais lorsque je suis passé à Marshmallow, mon application se bloque et donne cette erreur lorsque j'essaye de télécharger depuis Internet sur la carte SD:
Neither user nor current process has android.permission.WRITE_EXTERNAL_STORAGE
Il se plaint de cette ligne de code:
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
J'ai les autorisations dans l'application manifeste en dehors:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
J'ai nettoyé et reconstruit le projet, mais il plante toujours.
Réponses:
Vous devez vérifier si l'utilisateur a accordé l'autorisation de stockage externe en utilisant:
Sinon, vous devez demander à l'utilisateur d'accorder une autorisation à votre application:
Bien sûr, ce ne sont que pour les appareils guimauve, vous devez donc vérifier si votre application fonctionne sur Marshmallow:
Assurez-vous également que votre activité met en œuvre
OnRequestPermissionResult
La permission entière ressemble à ceci:
Rappel du résultat de l'autorisation:
la source
Manifest.permission.WRITE_EXTERNAL_STORAGE
renvoie toujours «-1», c'est-à-dire que l'autorisation est refusée. Consultez la nouvelle documentation, elle indique que pour l'API 19, vous n'avez pas besoin de l'WRITE_EXTERNAL_STORAGE
autorisation. Comme certains des commentaires ci-dessus mentionnés, vous devriez faire tout cela avec leManifest.permission.READ_EXTERNAL_STORAGE
getExternalFilesDir()
. Dans d'autres cas, l'autorisationandroid.permission.WRITE_EXTERNAL_STORAGE
doit toujours être déclarée dans manfiest.La courtoisie va à la demande d'autorisations au moment de l'exécution .
Exemple
Déclarez cela comme Global
Ajoutez ceci dans votre
onCreate()
sectionAprès setContentView (R.layout.your_xml);
Ajout de checkPermission () et requestPermission ()
FYI
onRequestPermissionsResult
la source
Vérifiez plusieurs autorisations au niveau de l'API 23 Étape 1:
Étape 2:
Étape 3:
Étape 4: dans onCreate of Activity checkPermissions ();
la source
never ask again
et manque-t-il quelques autorisations? L'utilisateur reçoit-il des commentaires? Cela aurait été bien de voir un exemple réel de cela ou plus de commentaires sur vos extraits de code.À moins qu'il n'y ait une exigence précise d'écriture sur un stockage externe, vous pouvez toujours choisir d'enregistrer les fichiers dans le répertoire de l'application. Dans mon cas, j'ai dû enregistrer des fichiers et après avoir perdu 2 à 3 jours, j'ai découvert si je modifiais le chemin de stockage de
à
cela fonctionne comme du charme sur tous les appareils. En effet, pour écrire sur le stockage externe, vous avez besoin d'autorisations supplémentaires, mais l'écriture dans le répertoire interne de l'application est simple.
la source
vous devez utiliser l'autorisation d'exécution dans marshmallow https://developer.android.com/training/permissions/requesting.html
vous pouvez vérifier les informations de l'application -> autorisation
votre application obtient-elle l'autorisation d'écrire sur le stockage externe ou non
la source
Il semble que l'utilisateur a refusé l'autorisation et que l'application tente d'écrire sur le disque externe, provoquant une erreur.
Vérifiez https://developer.android.com/training/permissions/requesting.html
Cette vidéo vous donnera une meilleure idée de l'UX, de la gestion des autorisations d'exécution https://www.youtube.com/watch?v=iZqDdvhTZj0
la source
À partir de la version marshmallow, les développeurs doivent demander des autorisations d'exécution à l'utilisateur. Permettez-moi de vous donner tout le processus pour demander des autorisations d'exécution.
J'utilise la référence d'ici: autorisations d'exécution de guimauve android .
Créez d'abord une méthode qui vérifie si toutes les autorisations sont données ou non
Voici maintenant le code qui est exécuté après la méthode ci-dessus. Nous remplacerons la
onRequestPermissionsResult()
méthode:Si l'utilisateur clique sur l' option Refuser , la
showDialogOK()
méthode sera utilisée pour afficher la boîte de dialogueSi l'utilisateur clique sur Refuser et clique également sur une case à cocher disant "ne plus jamais demander" , alors la
explain()
méthode sera utilisée pour afficher la boîte de dialogue.méthodes pour afficher les boîtes de dialogue:
L'extrait de code ci-dessus demande quatre autorisations à la fois. Vous pouvez également demander un nombre illimité d'autorisations dans toute activité selon vos besoins.
la source
Après de nombreuses recherches, ce code fonctionne pour moi:
Vérifiez que l'autorisation a déjà: Vérifiez l'autorisation WRITE_EXTERNAL_STORAGE Autorisée ou non?
Implémenter la méthode Override onRequestPermissionsResult pour vérifier si l'utilisateur autorise ou refuse
la source
ça a marché pour moi
la source
la source
Avant de commencer votre téléchargement, vérifiez vos autorisations d'exécution et si vous n'en avez pas les autorisations de demande comme cette méthode
requestStoragePermission ()
la source
D'une manière simple, l'autorisation peut être accordée en utilisant le fichier manifest.xml, mais c'était ok jusqu'au niveau de l'api 23 sdk version 6, après d'ici, si nous voulons obtenir l'autorisation, nous devons demander l'utilisation pour autoriser l'autorisation qui sont nécessaires.
Ajoutez simplement ce code dans le mainActivity.java
Remplacez CAMERA ou ajoutez avec WRITE_EXTERNAL_STORAGE si vous le souhaitez, et avec le code unique.
Ceci est le code simple pour obtenir la permission.
la source