Cómo escribir el registro a la tarjeta sd en Android?
Mi programa se está estrellando en el dispositivo. Quiero exactamente capturar el registro de mi programa mientras se ejecuta en mi dispositivo. Yo quiero escribir el registro a mi tarjeta sd, hasta el punto de estrellarse. ¿Cómo puedo conseguir esto?
- Eclipse no mostrar el tiempo en logcat para galaxia nexo sólo?
- Ejecutar comandos de shell y obtener resultados en un TextView
- ACTUALIZADO: Android: java.lang.RuntimeException: No se puede iniciar la actividad ComponentInfo
- Logcat lleno de mensaje "Valor inesperado de nativeGetEnabledTags: 0" - ¿cómo deshacerse de esto?
- Cómo habilitar eventos de salto de superficie en logcat
- Filtro de salida en logcat por tagname
- Cómo desactivar logcat Envolvimiento de texto en Eclipse Juno
- "El objeto real ha sido eliminado" en logcat
- Mensaje de logcat de Android: SurfaceTextureClient
- No se puede iniciar la aplicación para la intención de difusión
- Android: aplicación con el informe de volcado de bloqueo
- Pantalla negra aleatoria al iniciar la aplicación Android en el dispositivo
- Android: hacer que la aplicación registre mis instrucciones de registro "sólo"
Prueba esto
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this)); // add this to your activity page public class ExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler { private final Context myContext; private final String LINE_SEPARATOR = "\n"; UncaughtExceptionHandler defaultUEH; public ExceptionHandler(Context con) { myContext = con; defaultUEH = Thread.getDefaultUncaughtExceptionHandler(); } @SuppressWarnings("deprecation") public void uncaughtException(Thread thread, Throwable exception) { StringWriter stackTrace = new StringWriter(); exception.printStackTrace(new PrintWriter(stackTrace)); StringBuilder errorReport = new StringBuilder(); errorReport.append("************ CAUSE OF ERROR ************\n\n"); errorReport.append(stackTrace.toString()); errorReport.append("\n************ DEVICE INFORMATION ***********\n"); errorReport.append("Brand: "); errorReport.append(Build.BRAND); errorReport.append(LINE_SEPARATOR); errorReport.append("Device: "); errorReport.append(Build.DEVICE); errorReport.append(LINE_SEPARATOR); errorReport.append("Model: "); errorReport.append(Build.MODEL); errorReport.append(LINE_SEPARATOR); File root = android.os.Environment.getExternalStorageDirectory(); String currentDateTimeString = DateFormat.getDateTimeInstance().format( new Date()); File dir = new File(root.getAbsolutePath() + "/dir_name/log"); if (!dir.exists()) { dir.mkdirs(); } File file = new File(dir, "log.txt"); try { BufferedWriter buf = new BufferedWriter(new FileWriter(file, true)); buf.append(currentDateTimeString + ":" + errorReport.toString()); buf.newLine(); buf.close(); } catch (IOException e) { e.printStackTrace(); } defaultUEH.uncaughtException(thread, exception); System.exit(0); } }
Una vez que conseguí esto de algún lugar en SO. Prueba esto:
public static void printLog(Context context){ String filename = context.getExternalFilesDir(null).getPath() + File.separator + "my_app.log"; String command = "logcat -f "+ filename + " -v time *:V"; Log.d(TAG, "command: " + command); try{ Runtime.getRuntime().exec(command); } catch(IOException e){ e.printStackTrace(); } }
Esto imprime el registro continuamente hasta la salida de la aplicación.
Prueba esto :
public void appendLog(String text) { File logFile = new File("sdcard/log.file"); if (!logFile.exists()) { try { logFile.createNewFile(); } catch (IOException e) { Log.e(TAG, e.getMessage(), e); } } try { //BufferedWriter for performance, true to set append to file flag BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true)); buf.append(text); buf.newLine(); buf.close(); } catch (IOException e) { Log.e(TAG, e.getMessage(), e); } }
Si desea capturar sólo la excepción con el stacktrace, que en la mayoría de los casos es suficiente para obtener lo que estaba mal, ACRA es una solución ganadora.
Si usted desea escribir algo a su tarjeta del SD entonces toma en la consideración que usted no puede asumir que cualquier dispositivo tiene almacenaje externo que usted puede escribir a. A menos que valide esto.
Para traer otra opción de escribir en el almacenamiento externo, puede utilizar esta sencilla biblioteca:
android-simple-almacenamiento
Así es como lo usas:
-
Prepárese en alguna parte de su aplicación:
Storage storage = SimpleStorage.getExternalStorage(); // create your own directory storage.createDirectory("MyDir"); // create the file you want to write to inside your new directory storage.createFile("MyDir", "MyFile.txt", "");
-
Añada cualquier cadena (o byte []) cuando quiera a este archivo:
storage.appendFile("MyDir", "MyFile.txt", "your log line");
Usted puede crear / leer / actualizar / eliminar con esta pequeña biblioteca de archivos en los almacenes internos y externos muy fácil. Y, tener en cuenta que la escritura en el mismo archivo aumentará el espacio que se necesita. Puede utilizar getSize()
de la misma biblioteca para validar.
- ¿Cómo cambiar la página principal del navegador Android predeterminado dentro de una aplicación?
- No se encontró el archivo de Android- R.java