Je comprends que ExternalFiles doit être utilisé sur l'API 8 et plus et getExternalStorageDirectory est pour 7 et plus. Cependant je suis un peu confus entre l'utilisation. Par exemple, je voulais vérifier qu'un dossier existe et que vous utiliseriez auparavant quelque chose comme:
File ChildFolder = new File(Environment.getExternalStorageDirectory() + "/ParentFolder/Child");
Cependant, chaque exemple que je vois indique d'utiliser getExternalFilesDir (null), File.ext. Comme je suis au-dessus de l'API 8, je souhaite utiliser cette méthode, mais comment puis-je simplement rechercher un dossier? Je vais vérifier l'existence d'un fichier à un autre moment, mais pour l'instant je veux juste voir si les dossiers existent ??
getExternalStorageDirectory()
cela ne renvoie pas nécessairement - peut-être même pas habituellement - le «chemin vers votre carte SD». Au lieu de cela, il renvoie le "répertoire de stockage externe principal". Les documents ( developer.android.com/reference/android/os/… ) disent:Tout d'abord, nous devons comprendre quelle est la différence entre le stockage interne, le stockage externe (alias stockage externe principal) et le stockage externe secondaire?
Stockage interne: c'est le stockage qui n'est pas accessible par l'utilisateur, sauf via les applications installées (ou en rootant son appareil). Exemple: data / data / app_packageName
Stockage externe principal: dans le stockage partagé intégré qui est "accessible par l'utilisateur en branchant un câble USB et en le montant comme lecteur sur un ordinateur hôte". Exemple: quand on dit Nexus 5 32 Go.
Stockage externe secondaire: stockage amovible. Exemple: carte SD.
Il renvoie le chemin du dossier de fichiers dans Android / data / data / your_package / sur le stockage externe principal. Qui est le stockage intégré.
Il renverra le chemin du répertoire de stockage externe secondaire
la source
File getExternalStoragePublicDirectory (String type)
etFile getFilesDir ()
aussi! MISE À JOUR IMPORTANTE! pour quiconque rencontre cette question.
Comme il s'agit d'une question quelque peu ancienne, je voulais simplement fournir des informations supplémentaires. Étant donné que KitKat, même les applications disposant de l' autorisation WRITE_EXTERNAL_STORAGE ne sont autorisées à écrire que sur Android / data / data / your_package / sur un stockage externe, aka
getExternalFilesDir()
Si vous essayez d'écrire,
getExternalStorageDirectory() + "/somefolder/anotherfolder/"
vous obtiendrez une exception SecurityException sur la plupart des appareilsla source
!! IMPORTANT !!
Environment.getExternalStorageDirectory()
est obsolète et Context # getExternalFilesDir (String), MediaStore ou Intent # ACTION_OPEN_DOCUMENT, doit être utilisé à la place.https://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory ()
À partir d'Android.M, les développeurs doivent également demander des autorisations au moment de l'exécution.
Voir plus de détails dans la documentation ici et cette question
Environment.getExternalStorageDirectory () obsolète dans l'API niveau 29 Java
la source