Acceso a memoria externa (SD) [Android]

Nihon

Hola otra vez compañeros:

Lamento si estoy siendo un poco pesado, pero me parece mejor preguntar y comentar cualquier duda ya que igual así alguien con el mismo problema puede ver una solución. En fin, gracias de antemano otra vez.

Estoy trabajando en una aplicación que guarda imágenes en el móvil que, aún comprimiéndolas un montón, prefiero guardar los datos en la tarjeta SD del móvil. Como he desarrollado la aplicación con móviles Samsung con SD, he puesto a pelo la ruta para acceder a ella:

Environment.getExternalStorageDirectory()+"/external_sd/";

Pero el otro día tuve un problema, instalamos la aplicación en un Samsung Galaxy Note que no tenía SD ya que de memoria interna iba sobrado, pero la aplicación no funcionaba ya que nunca encontraba la carpeta "/external_sd/" y aunque la creaba mediante código nunca se creaba en el teléfono. Dadas las prisas por instalar la aplicación en el Note no tuve más remedio que cambiar las rutas a mano e instalarle esa versión "especial".

El caso es que cuando tenga que subir al servidor una nueva versión con cambios en la aplicación la semana que viene y se actualice en los móviles va a haber un problema con las rutas (se_va_a_habe_un_follon.mp3) si no tengo en cuenta los móviles que tengan SD donde ya había datos guardados de antes.

Ahora bien, Environment.getExternalStorageDirectory() no accede, ni devuelve la ruta a la tarjeta SD, se queda justo en la carpeta padre, del mismo modo que si pruebo Environment.isExternalStorageRemovable() me devuelve false en los Samsung con los que estamos trabajando (aunque true en mi Huawei personal) ya que no está comprobando la SD sino la memoria interna del móvil la cual nunca es desmontable.

He buscado por ahí y en la mayoría de respuestas dan por hecho que ExternalStorageDirectory accede a la SD, pero según veo depende del móvil y en el caso que me ocupa no me vale. En resumen me gustaría saber si sabéis alguna manera de acceder a la ruta de una SD en caso de estar disponible y como diferenciar la ruta de un móvil que no tenga.

¡Gracias otra vez!

Tig

Leete esto: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

Environment.getExternalStorageDirectory te va a devolver lo que el móvil considera como almacenamiento externo, olvídate si es SD card o una partición, precisamente han metido esta abstracción para que no toques rutas.

En cualquier caso context.getExternalFilesDir(Environment.XXX) te devuelve un File en el almacenamiento externo. Normalmente se guardará en $SD_CARD/Android/data/com.mypackage.example/XXX

PD: por tus preguntas, no quiero imaginar la chapuza que estás creando xD Todos lo hemos hecho, pero aquí vemos la evolución :-)

1 respuesta
Nihon

#2 Tio no me digas eso, que aunque lo pueda ser, que la imagen que esté dando es de estar haciendo una chapuza me duele XD. Pero bueno, las cosas que pregunto son precisamente las que no controlo y tengo más descuidadas.

En cuanto al tema, eso es de lo primero que me salió al buscar pero estoy un poco en las mismas, sin saber si simplemente puedo detectar si hay una SD montada en vez de la memoria del móvil.