Android M écrire sur Carte SD - Autorisation Refusée
Je suis en train de copier le fichier à partir de l'intérieur de mon application vers la carte SD, mais je reçois l'erreur eacces (permission denied). Le système d'exploitation est Android M et I ont permis d'exécution de Stockage des autorisations (vérifié dans l'app info). J'ai aussi mis les uses-permission AndroidManifest.xml
<application>...</application>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Ne fonctionne pas si je l'ai copier sur la carte SD
Source: data/user/0/com.example.myapp/cache/SomeFile.txt
Destination: /storage/1032-2568/SomeFolder/
Error: java.io.FileNotFoundException: /storage/1032-2568/SomeFolder/SomeFile.txt: open failed: EACCES (Permission denied)
Fonctionne si je copie de la mémoire de stockage interne
Source: data/user/0/com.example.myapp/cache/SomeFile.txt
Destination: /storage/emulated/0/SomeFolder/
Code à copier le fichier de la source à la destination
/*
* Below are the parameters I have tried
*
* inputPath - data/user/0/com.example.myapp/cache or data/user/0/com.example.myapp/cache/
* inputFile - /SomeFile.txt or SomeFile.txt
* outputPath - /storage/1032-2568/SomeFolder/or /storage/1032-2568/SomeFolder
*/
public static void copyFile(String inputPath, String inputFile, String outputPath) {
InputStream in = null;
OutputStream out = null;
try {
//create output directory if it doesn't exist
File dir = new File (outputPath);
if (!dir.exists()) {
dir.mkdirs();
}
in = new FileInputStream(inputPath + inputFile);
out = new FileOutputStream(outputPath + inputFile);
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
in.close();
//write the output file (You have now copied the file)
out.flush();
out.close();
}
catch (FileNotFoundException fnfe1) {
/* I get the error here */
Log.e("tag", fnfe1.getMessage());
}
catch (Exception e) {
Log.e("tag", e.getMessage());
}
}
ES Explorateur de Fichiers
J'ai vu que ES File Explorer ne peut pas écrire quoi que ce soit sur la Carte SD sur le Redmi appareils. Voici une vidéo avec la solution. En suivant les étapes travaillé pour ES Explorer sur mon appareil. Cela peut être fait par programmation?
N:
WRITE
inclut implicitement les READ
, par conséquent, il n'est pas nécessaire.Je lui ai permis de Stockage des autorisations à l'aide d'Exécution des autorisations.
Vous n'avez pas la permission d'écrire à divers endroits sur stockage amovible. Utiliser l'espace de Stockage Cadre d'Accès.
D'accord avec ce que CommonsGuy dit. C'est le problème avec l'emplacement que vous essayez d'écrire. Pouvez-vous essayer cet Environnement.getExternalStorageDirectory().toString()+ "/YourFolder", comme le chemin de la sortie?
OriginalL'auteur Sahil Khanna | 2017-03-28
Vous devez vous connecter pour publier un commentaire.
Comme suggéré par @CommonsWare ici, nous avons pour utiliser le nouveau Accès au Stockage du Cadre fourni par android et devra prendre l'autorisation d'un utilisateur à l'écriture de la carte SD le fichier comme vous l'avez dit c'est déjà écrit dans le Gestionnaire de Fichiers de l'Application ES Explorateur de Fichiers.
Voici le code permettant à l'utilisateur de choisir la "carte SD" :
qui va ressembler à quelque chose comme ceci :
Et obtenir le chemin d'accès du Document dans
pickedDir
et passer plus loin dans votre copyFile blocet c'est le chemin utilisé pour l'écriture du fichier :
OriginalL'auteur shadygoneinsane
Vous avez besoin d'ajouter de demande d'autorisation moment de l'exécution Android 6.0 (API Level 23) et, ici, c'est le officiel docs
C'est le code pour
WRITE_EXTERNAL_STORAGE
Demander la permission d'autre comme ce
OriginalL'auteur Junaid Hafeez
Je peux voir que vous copiez l'intégralité du contenu d'un fichier et essayer d'écrire la même chose à un autre fichier. Je pourrais suggérer une meilleure manière de faire ceci :
En supposant que vous avez déjà vérifié pour l'existence du fichier
Ce code a fonctionné pour mon application...Laissez-moi savoir si cela fonctionne pour vous ou pas..
Vous avez dit que vous a donné la permission de l'application info.Si vous faites comme cela, alors vous devez donner la permission à chaque fois que vous effacez vos données d'application.Donc, ce que je devine, c'est comme vous avez essayé de copier le fichier de stockage interne, et puis vous avez effacé de l'application des données.Donc, il a perdu son accès à l'entreposage et à ce moment sans en donner la permission que vous avez essayé d'accéder à l'espace de stockage . De sorte que vous obtenez l'erreur
Je lui ai permis de Stockage des autorisations à l'aide d'Exécution des autorisations. Et je ne suis pas à l'effacement des données.
S'il vous plaît montrer votre gestion des fichiers de code sinon, comment peut-on prédire bro ?
Ajouté le code source aussi. Voir si vous pouvez aider.
OriginalL'auteur bharath
J'ai aussi eu ce problème, mais j'ai résolu par l'utilisation de la demande l'autorisation au moment de l'exécution et après avec force en donnez la permission.Après l'autorisation en Application de l'info de l'appareil Android. après déclarer l'autorisation de manifester =>aller à la configuration de votre appareil => aller à l'app info => aller en permission =>
et enfin permettre à l'autorisation . juste rappelez-vous que je viens de vous parler après niveau api 22 moyens de guimauve.
OriginalL'auteur Peter
Sa semble l'exécution de l'autorisation sont mis en œuvre correctement, mais le problème semble à partir de l'appareil
Si vous utilisez Redmi que vous avez à autoriser manuellement l'autorisation de l'application spécifique dans Redmi paramètres de sécurité
Cette lien montre comment activer l'autorisation redmi sécurité
OriginalL'auteur Burhanuddin Rashid
Après Android 4.3 sur certains appareils, vous ne pouvez pas obtenir directement l'accès en écriture au système de fichier sur la carte sd.
Vous devez utiliser l'accès au stockage-cadre.
OriginalL'auteur Rostyslav Roshak
Vous ne pouvez pas copier ou Supprimer des fichiers & Dossier de stockage externe à l'aide de tiers app. comme [l'explorateur de fichiers].
C'est de la politique en matière de données mis à jour après KITKAT Version.
Si seulement permettre à sur le système d'applications. Ainsi, vous pouvez utiliser un fichier d'origine explorer (à partir de la ROM).
SI vous avez besoin d'utiliser la 3ème partie de l'app puis RACINE votre appareil. (Racine autorisation est requise)
OriginalL'auteur Jigar Patel
De l'Api 23 et au-dessus, vous avez besoin de demander l'autorisation explicite. Comme vous l'avez mentionné que vous demandez pour l'exécution de l'autorisation. Je vous suggère de faire comme ceci:
Dans votre Fragment ou de l'Activité
Alors remplacer cette méthode dans l'Activité/Fragment
OriginalL'auteur Muhammad Umair Shafique