PDA

Ver la Versión Completa : [ CONSULTA ] mkdirs() y list()


pablogarcia013
30/04/13, 13:11:06
buenas! tengo un problemilla con estas 2 instrucciones.

Estoy probando en 2 moviles : Galaxy S2 sin rootear y un Galaxy S1 rooteado. (no creo que el modelo de movil influya)

Quiero guardar unas imagenes desde codigo en una carpeta que la llamo por ejemplo: "directorio"

Lo que hago es intentar acceder a este directorio y si no existe lo crea despues recorro el directorio para ver cuantas imagenes hay ya creadas para asignarle un nombre diferente: pongo codigo:

File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/media/directorio");
if(!dir.exists())
dir.mkdirs();

String[] lista = dir.list();
int numfinal=0;
for(int i=0;i<lista.length;i++){
String cadena = lista[i];
String sub = cadena.substring(9,cadena.length()-4);
int num = Integer.parseInt(sub);
if(num>numfinal)numfinal=num;
}
numfinal++;
String strfinal = String.valueOf(numfinal);
strfinal = "IMG"+strfinal;
GuardarImagen(strfinal);


de esta manera si tengo 2 imagenes (IMG1 e IMG2) la siguiente se guardaria como IMG3

hasta aqui en el galaxy s2 funciona genial y lo hace perfecto pero en el galaxy s1 rooteado da un null exception, debugueando llego a que String[] lista = dir.list(); no lo hace bien, es decir lista == null; entonces al intentar acceder a ella da esa excepcion.

En el manifest tengo <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

tambien probe en una nexus 7 y si funciona.

¿Alguien sabe que puede estar pasando?

Muchas gracias!!! Otra vez!

rinxe
01/05/13, 12:57:37
Es raro lo que comentas ya que funciona en 2 dispositivos y en el S1 no. Lo unico que se me ocurre es que compruebes el almacenamiento externo antes de hacer esos pasos.

En mi blog tienes un ejemplo de opciones de almacenamiento y explico un poco el tema por si le quieres hechar un ojo.

pablogarcia013
03/05/13, 10:43:53
Siguiendo tu blog me di cuenta de que en vez de "mounted" pone "removed" cuando hago Environment.MEDIA_MOUNTED.equals(state) sabes por que pasa esto? o si se puede soluccionar?

Muchas gracias

rinxe
03/05/13, 12:10:03
Cuando esta en el estado "removed" quiere decir que no esta presente o no se detecta el almacenamiento masivo.

El fallo esta claro que viene del S1, comprueba que al ejecutar la aplicacion tengas acceso desde el S1 al almacenamiento masivo. Puede ser que tengas una rom personalizada y te este dando problemas, eso ya lo tendras que investigar tu

pablogarcia013
03/05/13, 12:23:11
Muchas gracias! yo tambien pense que seria del s1...puesto que si funciona en los demas...he puesto este codigo para avisar a los usuarios de que tienen que activarlo.
if (Environment.MEDIA_REMOVED.equals(state)) {
Toast.makeText(this,"Tienes el almacenamiento masivo desactivado, no puedes guardar la imagen, activalo!", Toast.LENGTH_SHORT).show();
}

rinxe
03/05/13, 15:45:50
Es una opcion sii, ya has visto los diferentes tipos de comprobar el almacenamiento masivo. Ya es cuestion de elegir que hacer en cada caso.

Normalmente se pierde o no esta presente el almacenamiento masivo cuando conectas el movil al pc