¿Dónde está la ubicación de mi tarjeta SD en 4.4.2?

En Android 4.4.2 Environment.getExternalStorageDirectory().getPath() devuelve /storage/emulated/0 pero esta ruta no existe en mi Nexus5 Android 4.4.2. Environment.getExternalStorageDirectory().getPath() funcionó hasta Android 4.4.2.

¿Cómo puedo obtener la ruta /sdcard en Android 4.4.2?

Esta ruta no existe en mi Nexus5 Android 4.4.2.

Sí, lo hace, para su proceso en tiempo de ejecución.

Por ejemplo, este proyecto de ejemplo descarga un archivo en Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) . Si registra la ubicación en tiempo de ejecución, al ejecutarla en un Nexus 5, se informa como /storage/emulated/0/Download . Y la descarga tiene éxito.

Si está buscando /storage/emulated/0 emulated /storage/emulated/0 vía DDMS o adb shell , no lo encontrará. Para esas herramientas, el almacenamiento externo predeterminado es /mnt/shell/emulated/0 . Por lo tanto, el archivo descargado de la muestra anterior aparece en el directorio /mnt/shell/emulated/0/Download .

AFAIK, la diferencia está ligada a la provisión de almacenamiento externo independiente a las cuentas secundarias.

A veces / storage / emulated / 0 se puede escribir en, pero lee falla … por lo que las pruebas de "capacidad de escritura" no son suficientes. Este es un problema tan molesto, he llegado con una solución igualmente molesto pero eficaz. Hardcode "/ mnt / sdcard" Sí, lo dije.

Parece que alguien más lo dijo primero … almacenando los datos de la aplicación de Android en la tarjeta SD

Más alegría … http://forums.bignerdranch.com/viewtopic.php?f=414&t=7407

La documentación de Opciones de almacenamiento dice que debe utilizar Environment.getExternalStorageDirectory () (como ya está utilizando correctamente). Esta función está disponible en todas las versiones de Android.

¿Está viendo que devuelva un camino que no está realmente disponible en un dispositivo 4.2?

Tenga en cuenta (desde Environment.getExternalStorageDirectory () ):

Las aplicaciones no deben usar directamente este directorio de nivel superior, para evitar contaminar el espacio de nombres raíz del usuario. Todos los archivos privados de la aplicación deben colocarse en un directorio devuelto por Context.getExternalFilesDir, que el sistema se encargará de eliminar si la aplicación se desinstala. Otros archivos compartidos deben colocarse en uno de los directorios devueltos por getExternalStoragePublicDirectory (String).

La escritura en esta ruta requiere el permiso WRITE_EXTERNAL_STORAGE y el inicio en el acceso de lectura requiere el permiso READ_EXTERNAL_STORAGE, que se concede automáticamente si mantiene el permiso de escritura.

A partir de KITKAT, si su aplicación sólo necesita almacenar datos internos, considere el uso de getExternalFilesDir (String) o getExternalCacheDir (), que no requieren permisos para leer o escribir.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.