Android: mkdirs ()/mkdir () sur les retours de stockage externe false
je suis attirée fou avec ceci:
Log.d("STATE", Environment.getExternalStorageState());
File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "work_data");
Log.d("PATH", f.getAbsolutePath());
if (!f.exists()) {
Log.d("MAKE DIR", f.mkdirs() + "");
}
Le journal de sortie ressemble à ceci:
STATE mounted
PATH /mnt/sdcard/DCIM/work_data
MAKE DIR false
j'ai fait en sorte d'ajouter l'autorisation correcte:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Mais je ne sais pas pourquoi il n'a pas pu créer le dossier. J'ai aussi utilisé mkdir()
étape par étape, mais le résultat est le même. S'il vous plaît aider moi. J'ai googlé tellement et passé au moins 2 jours sur cette chose stupide. Merci pour votre aide!!
édition:
Désolé tout le monde! J'avais ajouté <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application>
balise. c'était mon erreur! Mais merci à tous pour la réponse.
11 réponses
j'ai eu le même problème et j'ai cherché tout pour une semaine à essayer de trouver la réponse. Je pense que je l'ai trouvé et je pense que c'est ridiculement facile, vous devez mettre la déclaration d'utilisation-permission au bon endroit...
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.company.name"
android:versionCode="1"
android:versionName="0.2">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
quand je l'ai eu dans la section < application>< / application > ça n'a pas marché.
j'ai eu le même problème,et je suis sûr que j'avais mis l'étiquette de permission au bon endroit, mais mkdirs ne fonctionnait pas encore, mon système est Android 6.0, je le résous maintenant, vous pouvez vérifier comme ci-dessous:
- assurez-vous de mettre l'étiquette de permission .
- ouvrez "Paramètres / application" dans votre téléphone,vérifiez la permission de votre application(j'ai trouvé la permission dans mon manifeste n'est pas ici),ouvrez le commutateur de la permission comme ceci.(Je trouve qu'il est fermé par défaut qui faire "mkdirs" échec)
je sais que c'est un vieux post, mais peut-être que ma réponse peut aider quelqu'un.
après plusieurs jours de traitement de ce problème, je me suis rendu compte que bien que le téléphone soit connecté à L'ordinateur, ce qui est toujours le cas pendant le développement, la carte SD n'est pas disponible. Faisant ainsi échouer toute tentative de créer un répertoire ou un fichier. Pour le rendre "plus facile", il semblait se comporter différemment selon le téléphone testé.
je sais que cela peut sembler assez stupide problème, mais il a coûté beaucoup de temps qui peut-être quelques autres peut sauver.
ajouter cette ligne de code dans OnCreate()
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
Log.d("MAKE DIR", f.mkdir() + "");
au lieu de
Log.d("MAKE DIR", f.mkdirs() + "");
ou bien
String s=Environment.getExternalStorageDirectory().toString()+"/";
File f = new File(s+"DCIM/work_data");
Ton code fonctionne très bien pour moi.Il n'est pas quelque chose de mauvais dans votre code.
Seulement si vous êtes l'un répertoire d'utiliser f.mkdir()
au lieu de f.mkdirs()
Vous pouvez voir votre dossier dans mnt => Sd card => DCIM => work_data
mkdirs () ne renvoie true que si le répertoire a été créé. Si elle est déjà en place, elle devrait retourner false. Je parie que ce répertoire existe déjà.
j'avais le même problème, et je voulais juste partager ma dose. comme par android en commençant par Android 4.4, la lecture ou l'écriture de fichiers dans les répertoires privés de votre application ne nécessite pas les permissions READ_EXTERNAL_STORAGE ou WRITE_EXTERNAL_STORAGE.
vous pouvez donc déclarer que la permission ne doit être demandée que sur les versions inférieures D'Android en ajoutant l'attribut maxSdkVersion:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
mais maxSdkVersion est la problème, j'ai juste enlevé et maintenant ça fonctionne.
si vous avez android 6.0 et plus, assurez - vous que votre sdk cible dans le fichier gradle moins de 22:
targetSdkVersion 22
ou vous devez implémenter les permissions d'exécution.
Cela peut aider quelqu'un dans le futur.
le problème pourrait aussi être que vous écrivez l'adresse "/ File / Address/ " à la place vous devriez écrire
File.separator + "File" + File.separator + "Address" + File.separator
C'est une petite chose stupide, mais cela a fonctionné pour moi, après de perdre des heures de mon temps.
j'ai essayé de faire un ensemble de sous-dossiers dans le stockage externe 'Test/Test1/Test2' quand mkdirs() continuait à retourner false. Il s'avère que 'Test' est soit un mot réservé pour un dossier dans la racine de stockage externe (ou il peut avoir été un dossier caché). Il s'agissait d'une Motorola G (XT1541) qui peut également s'appliquer à d'autres appareils.