versiones sistema pie operativo developer descargar android

pie - android sistema operativo



getExternalFilesDir(null) devuelve null (3)

Una vez más, me he topado con una pregunta que se ha formulado y respondido anteriormente, pero en mi implementación todavía no funciona.

Estoy llamando a getExternalFilesDir (nulo) justo al comienzo del método onCreate de mi actividad principal. Devuelve nulo cada vez, ya sea que lo ejecute en un AVD o en mi teléfono (Samsung Galaxy Plus).

Sí, tengo la línea <uses-permission android:name="android.permissions.WRITE_EXTERNAL_STORAGE" /> en mi AndroidManifest.xml y sí, estoy verificando el estado de almacenamiento externo antes de realizar la llamada y está montado.

Aquí están las primeras tres líneas dentro de mi método onCreate () . En realidad, es justo después de las llamadas super.onCreate () y setContentView () .

String state = Environment.getExternalStorageState(); File extFiles = getExternalFilesDir(null); File locFiles = getFilesDir();

Entonces, una vez que estas tres líneas se hayan ejecutado, estos son los valores para las variables:

state == "mounted" extFiles == null locFiles == "/data/data/com.mypackage.name/files"

¿Alguien tendría alguna idea de por qué esto podría ser?

-----EDITAR-----

Así que he intentado otro enfoque; En lugar de usar getExternalFilesDir(null) , intenté usar File basePath = new File(Environment.getExternalStorageDirectory(), "myAppName");

Esto no es lo ideal y sé que la documentación de Android dice, y estoy de acuerdo con ello, que debería usar getExternalFilesDir() . Viendo que eso no me funciona, aunque tenía que intentar algo más. Esta vez, la función devuelve un objeto Archivo válido, por lo que, después de la línea anterior, la ruta de basePath es / mnt / sdcard / myAppName . Hasta ahora tan bueno. Cuando verifico con DDMS puedo ver que / mnt / sdcard existe pero no / mnt / sdcard / myAppName . Esto es de esperar. Así que llamo boolean result = basePath.mkdirs();

Pero esto devuelve falso y cuando verifico el sistema de archivos puedo confirmar que la subcarpeta myAppName no se ha creado. Cuando creo la carpeta manualmente a través de DDMS y coloco archivos en ella, puedo leer esos archivos desde mi aplicación pero no puedo escribir nada en esa carpeta.

¡Por favor ayuda! Estoy al final de mi ingenio.


Borrar una linea

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"

en AndroidManifest.xml .

Cambie un editor xml a "Permisos de manifiesto de Android" con la pestaña "Permiso" en eclipse, y agregue un

uses-permission "android.permission.WRITE_EXTERNAL_STORAGE"

Con algunos clics.

A continuación, intente ejecutar su aplicación.

Parece que eclipse (puede depender de una definición de versión o estado o configuración) puede ignorar algunas palabras descritas por direct xml en AndroidManifest.xml .

Gracias por un consejo. Tienes razón, mi respuesta pareció coincidir en una pequeña charla.


Esto es de la documentación de Android:

Devuelve la ruta del directorio que contiene los archivos de la aplicación en el almacenamiento externo. Devuelve nulo si el almacenamiento externo no está montado actualmente, por lo que no pudo garantizar que la ruta exista; Tendrá que volver a llamar a este método cuando esté disponible.

La otra opción es que puedes verificar si el almacenamiento externo está disponible:

String state = Environment.getExternalStorageState(); File filesDir; // Make sure it''s available if (Environment.MEDIA_MOUNTED.equals(state)) { // We can read and write the media filesDir = getExternalFilesDir(null); } else { // Load another directory, probably local memory filesDir = getFilesDir(); }


Si esto no fue un error tipográfico cuando publicaste tu pregunta, probablemente te odiarás por esto:

<uses-permission android:name="android.permissions.WRITE_EXTERNAL_STORAGE" />

debiera ser

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />