Lenguaje

ContextWrapper.GetExternalFilesDir(String) Método

Definición

Devuelve la ruta de acceso absoluta al directorio del sistema de archivos externo principal (es decir, en algún lugar de ExternalStorageDirectory) donde la aplicación puede colocar archivos persistentes que posee.

[Android.Runtime.Register("getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;", "GetGetExternalFilesDir_Ljava_lang_String_Handler")]
public override Java.IO.File? GetExternalFilesDir(string? type);
[<Android.Runtime.Register("getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;", "GetGetExternalFilesDir_Ljava_lang_String_Handler")>]
override this.GetExternalFilesDir : string -> Java.IO.File

Parámetros

type
String

Tipo de directorio de archivos que se va a devolver. Puede ser null para la raíz del directorio de archivos o una de las siguientes constantes de entorno para un subdirectorio: DirectoryMusic, DirectoryPodcasts, DirectoryRingtones, DirectoryAlarms, DirectoryNotifications, DirectoryPictureso DirectoryMovies.

Devoluciones

Devuelve la ruta de acceso absoluta al directorio del dispositivo de almacenamiento compartido o externo principal donde la aplicación puede colocar archivos persistentes que posee. Estos archivos son internos para las aplicaciones y normalmente no son visibles para el usuario como medios. Esto es como getFilesDir() en que estos archivos se eliminarán cuando se desinstale la aplicación, pero hay algunas diferencias importantes: el almacenamiento compartido puede no estar siempre disponible, ya que el usuario puede expulsar los medios extraíbles. El estado multimedia se puede comprobar mediante Environment.getExternalStorageState(File) . No se aplica ninguna seguridad con estos archivos. Por ejemplo, cualquier aplicación que contenga Manifest.permission.WRITE_EXTERNAL_STORAGE puede escribir en estos archivos. Si se emula un dispositivo de almacenamiento compartido (determinado por Environment.isExternalStorageEmulated(File) ), su contenido está respaldado por una partición de datos de usuario privada, lo que significa que hay poca ventaja para almacenar datos aquí en lugar de los directorios privados devueltos por getFilesDir(), etc. A partir de Build.VERSION_CODES. KITKAT , no se requieren permisos para leer o escribir en la ruta de acceso devuelta; siempre es accesible para la aplicación que llama. Esto solo se aplica a las rutas de acceso generadas para el nombre del paquete de la aplicación que llama. Para acceder a las rutas de acceso que pertenecen a otros paquetes, se requieren Manifest.permission.WRITE_EXTERNAL_STORAGE o Manifest.permission.READ_EXTERNAL_STORAGE. En dispositivos con varios usuarios (como se describe en UserManager), cada usuario tiene su propio almacenamiento compartido aislado. Las aplicaciones solo tienen acceso al almacenamiento compartido para el usuario en el que se ejecutan. La ruta de acceso devuelta puede cambiar con el tiempo si se insertan distintos medios de almacenamiento compartidos, por lo que solo se deben conservar las rutas de acceso relativas. Este es un ejemplo de código típico para manipular un archivo en el almacenamiento compartido de una aplicación: void createExternalStoragePrivateFile() { // Crear una ruta de acceso donde colocaremos nuestro archivo privado en el almacenamiento externo // . Archivo = new File(getExternalFilesDir(null), "DemoFile.jpg"); try { // Código muy sencillo para copiar una imagen del recurso // de la aplicación en el archivo externo. Tenga en cuenta que este código no realiza ninguna comprobación de errores y supone que la imagen es pequeña (no // intenta copiarla en fragmentos). Tenga en cuenta que si el almacenamiento externo es // no está montado actualmente, se producirá un error en modo silencioso. InputStream es = getResources().openRawResource(R.drawable.balloons); OutputStream os = new FileOutputStream(file); byte[] data = new byte[is.available()]; is.read(data); os.write(data); is.close(); os.close(); } catch (IOException e) { // No se puede crear el archivo, probablemente porque el almacenamiento externo es // no está montado actualmente. Log.w("ExternalStorage", "Error al escribir " + archivo, e); } } void deleteExternalStoragePrivateFile() { // Get path for the file on external storage. Si el almacenamiento externo // no está montado actualmente, se producirá un error. Archivo = new File(getExternalFilesDir(null), "DemoFile.jpg"); file.delete(); } booleano hasExternalStoragePrivateFile() { // Get path for the file on external storage. Si el almacenamiento externo // no está montado actualmente, se producirá un error. Archivo = new File(getExternalFilesDir(null), "DemoFile.jpg"); return file.exists(); } Si proporciona un tipo que no es NULL a esta función, el archivo devuelto será una ruta de acceso a un subdirectorio del tipo especificado. Aunque el analizador de medios no examina automáticamente estos archivos, puede agregarlos explícitamente a la base de datos multimedia con MediaScannerConnection.scanFile . Tenga en cuenta que esto no es lo mismo que Environment.getExternalStoragePublicDirectory(), que proporciona directorios de medios compartidos por todas las aplicaciones. Los directorios devueltos aquí son propiedad de la aplicación y su contenido se quitará cuando se desinstale la aplicación. A diferencia de Environment.getExternalStoragePublicDirectory(), el directorio devuelto aquí se creará automáticamente. Este es un ejemplo de código típico para manipular una imagen en el almacenamiento compartido de una aplicación y agregarla a la base de datos multimedia: void createExternalStoragePrivatePicture() { // Crear una ruta de acceso donde colocaremos nuestra imagen en nuestro propio directorio privado // pictures. Tenga en cuenta que realmente no es necesario colocar una imagen // en DIRECTORY_PICTURES, ya que el escáner multimedia verá // todos los medios de estos directorios; esto puede ser útil con otros tipos de medios // como DIRECTORY_MUSIC sin embargo, para ayudar a clasificar // los medios para mostrarlos al usuario. Ruta de acceso del archivo = getExternalFilesDir(Environment.DIRECTORY_PICTURES); File file = new File(path, "DemoPicture.jpg"); try { // Código muy sencillo para copiar una imagen del recurso // de la aplicación en el archivo externo. Tenga en cuenta que este código no realiza ninguna comprobación de errores y supone que la imagen es pequeña (no // intenta copiarla en fragmentos). Tenga en cuenta que si el almacenamiento externo es // no está montado actualmente, se producirá un error en modo silencioso. InputStream es = getResources().openRawResource(R.drawable.balloons); OutputStream os = new FileOutputStream(file); byte[] data = new byte[is.available()]; is.read(data); os.write(data); is.close(); os.close(); Informe al analizador multimedia sobre el nuevo archivo para que esté // disponible inmediatamente para el usuario. MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri URI) { Log.i("ExternalStorage", "Scan " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } }); } catch (IOException e) { // No se puede crear el archivo, probablemente porque el almacenamiento externo es // no está montado actualmente. Log.w("ExternalStorage", "Error al escribir " + archivo, e); } } void deleteExternalStoragePrivatePicture() { // Cree una ruta de acceso donde colocaremos nuestra imagen en el directorio // public pictures del usuario y eliminará el archivo. Si el almacenamiento externo // no está montado actualmente, se producirá un error. Ruta de acceso del archivo = getExternalFilesDir(Environment.DIRECTORY_PICTURES); if (path != null) { File file = new File(path, "DemoPicture.jpg"); file.delete(); } } booleano hasExternalStoragePrivatePicture() { // Cree una ruta de acceso donde colocaremos nuestra imagen en el directorio // public pictures del usuario y comprobará si el archivo existe. Si el almacenamiento externo // no está montado actualmente, cree que la imagen // no existe. Ruta de acceso del archivo = getExternalFilesDir(Environment.DIRECTORY_PICTURES); if (path != null) { File file = new File(path, "DemoPicture.jpg"); return file.exists(); } devuelve false; } Parámetros tipo String: este valor puede ser NULL . Devuelve Archivo Este valor puede ser null.

Atributos

Comentarios

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android y se usan según los términos descritos en creative Creative Commons 2.5 Attribution License.

Java documentación para android.content.ContextWrapper.getExternalFilesDir(java.lang.String).

Se aplica a