programacion - Creando y almacenando el archivo de registro en el dispositivo en Android
manual de programacion android pdf (2)
Desconfiado o no, el almacenamiento externo puede ser la única manera de hacerlo. Sin acceso a la raíz en el dispositivo, realmente no puede obtener nada "Interno" a menos que vaya a estar bien con la lectura dentro de una aplicación en el dispositivo. Los documentos proporcionan pautas bastante sólidas sobre dónde crear archivos externos, y si está utilizando el Nivel 8 de API o superior, hay un par de funciones adicionales que se pueden usar. 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 necesita algún código de ejemplo de archivo io ... creo que podría desenterrar algo ...
EDITAR - Comenzaría siguiendo las pautas en los documentos anteriores para confirmar primero el estado del almacenamiento. Lamentablemente, no tengo experiencia en agregar un archivo en Java, por lo que alguien más estaría más calificado para responder. Esto no cubre agregar, pero tengo una rutina de copia de seguridad en una de mis aplicaciones personales que se ve 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 estoy listo para escribir, estoy sacando un objeto personalizado (entrada) de un ArrayAdapter (adaptador) y convirtiendo el campo valuse en cadenas y usando getBytes () para pasar a la función de escritura FileOutputStream. He investigado un poco y hay muchas otras opciones para escribir archivos en Java / Android ... la clase FileWriter, por ejemplo, por lo que conlleva más investigación.
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 luego analizarla utilizando un código de Python y trazar un gráfico.
La aplicación es una huella digital WiFi, es decir, recopila información como mac id, rss (intensidad de señal recibida y rango (rss normalizados) sobre los dispositivos wifi en el entorno circundante. Para probar esta aplicación, tendría que llevarla a la ubicación y Registre los resultados (a partir de ahora manualmente). Por lo tanto, Logcat no serviría para nada.
La automatización requiere 1. Almacenar el registro en el dispositivo 2. Acceder 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 ajustaría a este escenario de todos modos). MODE_WORLD_READABLE
almacenamiento interno, pero incluso después de configurar el modo del archivo como MODE_WORLD_READABLE
, fue imposible leer el archivo utilizando el Explorador de archivos de dispositivos en Eclipse .
Todavía desconfío del uso de almacenamiento externo para almacenar el registro. Cualquier tutorial sobre cómo escribir en un archivo en usb del dispositivo definitivamente ayudará.
Pensé en estructurar los datos que se almacenarán para usar SQLite para el almacenamiento. Pero esto establece muchas relaciones innecesarias (extranjeras y domésticas) entre los datos y lo hacen complejo. Si no hay manera alrededor, entonces aquí hay dragones .
Básicamente, quiero escribir en un archivo (más fácil, supongo) en el dispositivo y luego leerlo en mi sistema conectándolo a través de usb. Cualquier ayuda sobre cómo hacerlo sería muy apreciada.
Utilicé un método muy simple para escribir mensajes de cadena en el archivo de registro creando un objeto 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();
}