Je suis nouveau en Android et je suis confronté à un problème pour lire getExternalStorageDirectory en Java, j'ai lu https://developer.Android.com/reference/Android/os/ Environnement mais ne peut pas comprendre, quelqu'un peut-il m'aider avec un exemple de code en Java.
Depuis docs vous pouvez voir:
getExternalStoragePublicDirectory(String type)
Cette méthode a été déconseillée au niveau de l'API 29. Pour améliorer la confidentialité des utilisateurs, l'accès direct aux périphériques de stockage partagés/externes est déconseillé. Lorsqu'une application cible Build.VERSION_CODES.Q, le chemin renvoyé par cette méthode n'est plus directement accessible aux applications. Les applications peuvent continuer à accéder au contenu stocké sur un stockage partagé/externe en migrant vers des alternatives telles que Context # getExternalFilesDir (String), MediaStore ou Intent # ACTION_OPEN_DOCUMENT.
Ne passez rien en paramètre à cette fonction pour obtenir votre répertoire en tant qu'objet File
:
context.getExternalFilesDir();
Ici "Context" est un objet qui est obtenu par this.getContext();
this
est l'objet actuel de l'activité. Vérifiez soigneusement la portée lors de son utilisation.
Important
Pour accéder au stockage interne, Manifest.permission.WRITE_EXTERNAL_STORAGE
et/ou Manifest.permission.READ_EXTERNAL_STORAGE
sont requis dans le fichier AndroidManifest.xml .
Information optionnelle:
Habituellement, le stockage interne a le chemin/sdcard/on Android. Ce n'est pas un vrai chemin mais un lien symbolique .
C'est déroutant mais "carte SD externe" dans Android signifie en fait le stockage de l'appareil interne et non le stockage de carte mémoire externe éjectable hors de l'appareil. Notez également que la vraie carte SD externe ne peut pas être complètement accès
Activité classe étend la classe Context C'est pourquoi nous pouvons en tirer le contexte.
Utilisez cette méthode statique. Actuellement, je ne trouve aucun moyen légal de le faire. Donc, on m'a fait cette méthode statique pour obtenir le chemin du fichier racine ou getAbsolutePath.
public static File getAbsoluteDir(Context ctx, String optionalPath) {
String rootPath;
if (optionalPath != null && !optionalPath.equals("")) {
rootPath = ctx.getExternalFilesDir(optionalPath).getAbsolutePath();
} else {
rootPath = ctx.getExternalFilesDir(null).getAbsolutePath();
}
// extraPortion is extra part of file path
String extraPortion = "Android/data/" + BuildConfig.APPLICATION_ID
+ File.separator + "files" + File.separator;
// Remove extraPortion
rootPath = rootPath.replace(extraPortion, "");
return new File(rootPath);
}
Réponse courte:
String path = getContext().getExternalFilesDir(null).getAbsolutePath();