![]() |
|
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
«
Tema Anterior
|
Siguiente tema
»
|
Herramientas |
#1
|
||||
|
||||
Buscando archivos por toda la memoria
¿Como se haría para hacer una búsqueda por toda la memoria del móvil, hasta encontrar un archivo concreto? me refiero a la memoria que es como el disco duro, haciendo una búsqueda que recorra todas las carpetas, y cuando lo encuentre nos diga la ruta. ¿es muy complicado esto?
Y ya puestos a preguntar, lo mismo pero para buscar en la tarjeta SD. La idea es que el usuario meta el nombre de una foto y el móvil la busque por toda la memoria y la tarjeta. Otro tema, cuando le doy a compilar a mi aplicación llama al emulador para ver mi aplicación, el AVD que yo haya definido y tal, pero tarda mucho en aparecer... ¿esto es normal? ¿hay algún emulador más rápido o mejor ? |
|
#2
|
||||
|
||||
La búsqueda se hace a mano recorriendo todos los ficheros y directorios, lo mejor es que le pidas al usuario en qué carpeta buscar o usar las habituales de la cámara. Y mejor todavía hacerte un índice para no recorrerlo todo en cada búsqueda.
El emulador va a pedales, hasta en mi i7 3770K con 8 GB... Si tu procesador soporta virtualizacion, se pueden usar algunas imágenes x86 y va algo más fino. Lo mejor es tener un móvil para probar, de emuladores los más básicos van sueltecillos (hasta gingerbread). Los ICS son lentos salvo que uses la imagen x86 (que requiere instalar los drivers Intel HAX o algo así) |
#3
|
||||
|
||||
Basicamente tu lo que quieres es una busqueda recursiva, luego ya da igual que sea en la memoria interna que externa.
Este metodo por ejemplo es para buscar todos los .pdf que existan en una ruta Código:
public void walkdir(File dir) { String pdfPattern = ".pdf"; File listFile[] = dir.listFiles(); if (listFile != null) { for (int i = 0; i < listFile.length; i++) { if (listFile[i].isDirectory()) { walkdir(listFile[i]); } else { if (listFile[i].getName().endsWith(pdfPattern)){ //Aqui haces lo que quieras con los archivos terminados en .pdf } } } } } Y la otra duda si, es bastante normal, y no hay mejores emuladores, bueno ahi uno http://www.android-x86.org que esta escrito directamente en x86 en vez de en ARM por lo que va igual de rapido que cualquier otro programa de windows puesto que lo que ralentiza mas al emulador es la conversion de las instrucciones x86 a ARM pero es costoso hacer este otro emulador, la ultima vez que lo probe no iba del todo bien, tienes que montarlo sobre virtualbox y luego no se muy bien como ira la integracion con eclipse... Asi que siempre se suele recomendar que si tienes un movil android lo pruebes con el movil y si tienes que mirar alguna cosa de proporciones o como queda en distintas pantallas pues ya usas los emuladores si no tienes varios moviles, que yo he visto a gente que trabaja de desarrollo web y tienen el pc y alrededor todo pantallas de moviles, tablets...de distintos tamaños para ver como va quedando en todas ellas. |
Gracias de parte de: | ||
#4
|
||||
|
||||
Gracias, la verdad es que no había pensado en una función recursiva y va de perlas.
Me va muy bien llamándola para la SD, pero para el directorio principal de la memoria interna no me sale... he intentado lo de las "//" y no me va... ¿Cómo hago una búsqueda por la memoria interna? |
#5
|
he probado el ejemplo de set92 con walkdir(Environment.getExternalStorageDirectory()) ;
en mi tablet que no tiene tarjeta SD (ni posibilidad de tenerla), y listo todas mis carpetas pero todas comienzan por "/STORAGE/EMULED/0/" ¿esto es normal? ahí veo carpetas mias, donde he puesto libros y fotos, pero también gran cantidad de otras carpetas que supongo que serán de android, de aplicaciones instaladas y demás, entonces, si tuviera una tarjeta SD de verdad ¿vería solo el contenido de la SD?, es que a mi la sensación que me ha dado es que me ha listado el 100% de las carpetas que tiene mi tablet. |
#6
|
||||
|
||||
Obviamente no podia ser solo / pulpos porque piensa que todos los moviles no tienen las mismas rutas, incluso en el mismo movil cuando cambias de rom a veces cambian las rutas que me paso el otro dia no recuerdo con que rom que me pidio formatear la memoria interna, por lo que necesitas un metodo de android que siempre te sepa decir cual es, getFilesDir() creo que te daba donde esta la app pero no se si habra alguno mejor que te sirva.
Teneis aqui para leer que os resolvera las dudas http://developer.android.com/guide/t...a-storage.html Sino este ejemplo creo que hace lo que quereis http://android-er.blogspot.com.es/20...l-storage.html Tu caso usuariochino es mas dificil/raro porque hay que saber como han hecho todos los directorios o como hacen las compañias cuando no tienes SD externa, puede que si tenga 2 SD o que solo tenga una y la hayan partido en 2 para usar un trozo de ella como memoria externa, de ahi el nombre de EMULED pero no se. |
#7
|
||||
|
||||
hola chicos.
Para usuariochino333: Lo de la ruta "/STORAGE/EMULED/0/", he leído por ahí que el "0" es porque es el usuario principal, los demás usuarios tendrán números "1", "2", etc, eso suponiendo que tengas android 4.2, los anteriores no tienen soporte multiusuario y ahí no se si hay número. Tampoco se como va en android si son archivos compartidos o exclusivos de cada usuario, supongo que solo verás los compartidos. La ruta es diferente para cada movil/table, pero da igual, con esa información puedes encontrar tu archivo, abrirlo, manipularlo, etc. Lo que no se es porque ves cosas que no están en la SD emulada, eso que dices que ves el 100% de carpetas de tu tablet. ¿qué pasaría en las tablet con SD real?, ¿verías solo loas carpetas de la SD o también la memoria interna?. Lo que yo tampoco se, es como poner una carpeta en raiz de la memoria interna y que quede disponible para cualquier aplicación ¿se puede sin ser root?, he leído por ahí que cada aplicación tiene su carpeta para poner sus archivos, lo que no se es como salir de esa carpeta y acceder a la carpeta de otra aplicación o una carpeta creada por mi en raiz. Esto lo he buscado por internet y no he logrado encontrarlo. |
#8
|
||||
|
||||
Venía a preguntar como movernos por las carpetas y he encontrado este tema, jajaja, parece que buscar antes de preguntar es buena idea.
Mi código sería el siguiente: [PHP] public class MainActivity extends ActionBarActivity { TextView texto; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); texto = (TextView) findViewById(R.id.texto); walkdir(Environment.getExternalStorageDirectory()) ; } public void walkdir(File dir) { String pdfPattern = ".pdf"; String LOGTAG = "LogsAndroid"; File listFile[] = dir.listFiles(); Log.e(LOGTAG, "PRIMERO"); if (listFile != null) { Log.e(LOGTAG, "DENTRO"); for (int i = 0; i < listFile.length; i++) { if (listFile[i].isDirectory()) { walkdir(listFile[i]); } else { if (listFile[i].getName().endsWith(pdfPattern)){ texto.setText("dentro"); } } } } else { texto.setText("fuera"); Log.e(LOGTAG, "FUERA"); } } } [/PHP] No da error, pero en la ventanida de "logcat" solo me aparece: 11-13 11:57:42.281 20043-20043/com.agapito.listandoarchivos E/LogsAndroid﹕ PRIMERO 11-13 11:57:42.281 20043-20043/com.agapito.listandoarchivos E/LogsAndroid﹕ FUERA Nunca pasaa por DENTRO, por supuesto tengo varios archivos PDF. ¿Alguna idea ? |
#9
|
||||
|
||||
Lo mas recomedable es quE hagas lo que tE dijo mocelet puesto que para un usuario seria completamente molesto tener que buscar una foto con el nombre por que cuando la camara saca una foto no te dice exactamente "foto tomada en tal lugar" o algo asi y por eso seria un problema
|
#10
|
||||
|
||||
Después de buscar un rato por internet he encontrado la solución, la doy por si alguien más esta atascado con esto mismo, me faltaban los permisos en el archivo AndroidManifest.xml, hay que añadir la linea:
Código:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> Última edición por MortadeloComic Día 13/11/14 a las 17:16:19 |
Respuesta |
![]() |
||||||
|
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 08:10:29 (GMT +2)
HTCMania: líderes desde el 2007