Creación y almacenamiento de archivos de registro en dispositivos en Android
Estoy planeando automatizar la prueba de una aplicación creando un registro para almacenar algunos resultados de la ejecución de la aplicación y el último en analizarla usando una pieza del código de python y trazar un gráfico.
La aplicación es un fingerprinter WiFi, es decir, recopila información como mac id, rss (recibió la fuerza de la señal y el rango (rss normalizado) sobre los dispositivos wifi en el entorno.Para probar esta aplicación tendría que llevarlo a la ubicación y Grabar los resultados (a partir de ahora manualmente). Así que logcat no serviría al propósito.
- LogCat para Android: TextLayoutCache :: replaceThai y error al abrir el archivo de rastreo
- ¿Cómo implementar el registro / registrarse en android?
- Android, ¿Log reduce la velocidad de la aplicación?
- Cómo detectar la información del sistema como OS o tipo de dispositivo
- Visor de registro de escritorio de Android
La automatización requiere 1. Almacenar el registro en el dispositivo 2. Acceso al archivo de registro en el sistema a través de usb
Formato del archivo de registro:
Snapshot: 1 Fingerprint: 1, Rank: 0.23424, Boolean: true Fingerprint: 2, Rank: 0.42344, Boolean: false Fingerprint: 3, Rank: 0.23425, Boolean: true Snapshot: 2 Fingerprint: 1, Rank: 0.75654, Boolean: false Fingerprint: 2, Rank: 0.23456, Boolean: true Fingerprint: 3, Rank: 0.89423, Boolean: true ................
Ahora sé que hay básicamente 3 enfoques para el almacenamiento persistente (SharedPrefs no se adaptaría a este escenario de todos modos). He intentado el almacenamiento interno, pero incluso después de establecer el modo del archivo como MODE_WORLD_READABLE
era imposible leer el archivo utilizando el Explorador de archivos de dispositivo en Eclipse .
Todavía me cuesta usar el almacenamiento externo para almacenar el registro. Cualquier tutorial sobre cómo escribir en un archivo en usb del dispositivo sin duda ayudará.
Pensé en la estructuración de los datos para ser almacenados para utilizar SQLite para el almacenamiento. Pero esto establece muchas relaciones innecesarias (extranjeras y domésticas) entre datos y lo hacen complejo. Si no hay manera alrededor, entonces aquí sean dragones .
Básicamente quiero escribir en un archivo (más fácil supongo) en el dispositivo y el último en leerlo en mi sistema mediante la conexión a él a través de usb. Cualquier ayuda sobre cómo hacerlo sería muy apreciada.
- SLF4J varargs interpreta la primera cadena como marcador
- Cómo imprimir registros en la consola cmd mientras se ejecuta prueba de instrumento android
- Informe de errores completo y personalizado de las aplicaciones de Android
- Phonegap Media API - Grabar y reproducir audio - Android
- Imprimir el contenido de un paquete a Logcat?
- Cómo depurar Android inEclipse
- Debo eliminar e.printStackTrace () de mi código antes de publicar
- ¿Cuál es la semántica del valor devuelto de las funciones de registro de Android (por ejemplo, Log.v ())?
Cuidadoso o no, el almacenamiento externo todavía puede ser el único camino a seguir. Sin el acceso root en el dispositivo, realmente no se puede obtener nada "interno" a menos que usted va a estar bien con la lectura dentro de una aplicación en el dispositivo. Los documentos proporcionan directrices bastante sólidas para dónde crear archivos externos y, si utiliza API de nivel 8 o superior, hay un par de funciones adicionales que se pueden utilizar. Estoy seguro de que conoce esta página, pero aquí está de todos modos: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
Si usted está en necesidad de cualquier código de ejemplo de archivo io … Creo que podría cavar algunos hasta …
EDIT – Empezaría por seguir las directrices de los documentos anteriores para confirmar primero el estado del almacenamiento. Por desgracia, no tengo ninguna experiencia con la adición de un archivo en Java, por lo que alguien más sin duda sería más calificado para responder. Esto no cubre la adición, pero tengo una rutina de copia de seguridad en una de mis aplicaciones personales que se parece a algo así.
File backupPath = Environment.getExternalStorageDirectory(); backupPath = new File(backupPath.getPath() + "/Android/data/com.maximusdev.bankrecord/files"); if(!backupPath.exists()){ backupPath.mkdirs(); } FileOutputStream fos; try { fos = new FileOutputStream(backupPath.getPath() + "/recordsbackup.txt"); if(okaytowrite){ for(int i = 0; i < count; ++i){ entry = adapter.getItem(i); fos.write(entry.toString().getBytes()); fos.write("\n".getBytes()); fos.write(String.valueOf(entry.dateTime).getBytes()); fos.write("\n".getBytes()); fos.write(String.valueOf(entry.sign).getBytes()); fos.write("\n".getBytes()); fos.write(String.valueOf(entry.cleared).getBytes()); fos.write("\n".getBytes()); fos.write(String.valueOf(entry.transDate).getBytes()); fos.write("\n".getBytes()); fos.write(entry.category.getBytes()); fos.write("\n".getBytes()); } } fos.close(); Toast.makeText(this, "Backup Complete", Toast.LENGTH_SHORT).show(); } catch (FileNotFoundException e) { e.printStackTrace(); AlertDialog.Builder delmessagebuilder = new AlertDialog.Builder(this); delmessagebuilder.setCancelable(false); delmessagebuilder.setMessage("File Access Error"); delmessagebuilder.setNeutralButton("Okay", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); } }); delmessagebuilder.create().show(); } catch (IOException e) { e.printStackTrace(); AlertDialog.Builder delmessagebuilder = new AlertDialog.Builder(this); delmessagebuilder.setCancelable(false); delmessagebuilder.setMessage("File Access Error"); delmessagebuilder.setNeutralButton("Okay", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); } }); delmessagebuilder.create().show(); }
Una vez que esté listo para escribir, estoy extrayendo un objeto personalizado (entrada) de un ArrayAdapter (adaptador) y convirtiendo valuse de campo en cadenas y usando getBytes () para pasar a la función de escritura FileOutputStream. He hecho algunas investigaciones y hay bastantes otras opciones para la escritura de archivos en Java / Android … la clase FileWriter por ejemplo, por lo que lleva más investigación.
Utilicé un acercamiento muy simple para escribir los mensajes de la secuencia al archivo de registro creando un objeto de FileWriter.
public static BufferedWriter out; private void createFileOnDevice(Boolean append) throws IOException { /* * Function to initially create the log file and it also writes the time of creation to file. */ File Root = Environment.getExternalStorageDirectory(); if(Root.canWrite()){ File LogFile = new File(Root, "Log.txt"); FileWriter LogWriter = new FileWriter(LogFile, append); out = new BufferedWriter(LogWriter); Date date = new Date(); out.write("Logged at" + String.valueOf(date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds() + "\n")); out.close(); } }
Ahora la función para escribir un nuevo mensaje en el archivo de registro.
public void writeToFile(String message){ try { out.write(message+"\n"); out.close(); } catch (IOException e) { e.printStackTrace(); }
- ¿Cómo usar Git correctamente en Android Studio?
- Configuración de splitActionBarWhenNarrow desde Java en Android