월별 글 목록: 2010년 12월월

[안드로이드] 쓰레드덤프 파일을 sdcard 로 꺼내는 코드

 쓰레드덤프 파일은 “/data/anr/traces.txt” 로 남게 되는데, data 폴더는 실제 폰에서 루팅을 해야만 접근을 할 수 있습니다. 그래서 폰에서도 다른 도구 없이 소스코드를 사용하여 sdcard 로 옮기기 위해서 간단히 파일 복사 코드를 만들어 보았습니다.

[code java]
package com.test;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;


import android.content.Context;
import android.os.Environment;


public class DumpCheck {


 private File mDumpFile = null;
 private final static String DUMP_FILE_PATH = “/data/anr/traces.txt”;
 
 public void checkDumpFile(Context context, boolean deleteDumpFile) throws IOException {
  if(existDumpFile() == true) {
   if(copyDumpFile(context) == true) {
    if(deleteDumpFile == true) {
     deleteDumpFile();
    }
   }
  }
 }
 
 public boolean existDumpFile() {
  if (mDumpFile == null) {
   mDumpFile = new File(DUMP_FILE_PATH);
  }
  if (mDumpFile == null) {
   return false;
  }
  return mDumpFile.exists();
 }
 
 public boolean deleteDumpFile() {
  if (mDumpFile == null) {
   mDumpFile = new File(DUMP_FILE_PATH);
  }
  if (mDumpFile == null || mDumpFile.exists() == false) {
   return false;
  }
  return mDumpFile.delete();
 }
 
 public boolean copyDumpFile(Context context) throws IOException {
  boolean result = false;
  if (mDumpFile == null) {
   mDumpFile = new File(DUMP_FILE_PATH);
  }
  if (mDumpFile == null || mDumpFile.exists() == false) {
   return false;
  }
 
  FileWriter writer = null;
  InputStream inputStream = null;
  try {
   if(mDumpFile.canRead() == false) {
    return false;
   }


   inputStream = new FileInputStream(mDumpFile);
   String fileString = “”;
   int readNum;
   byte in[] = new byte[512];
   while ((readNum = inputStream.read(in, 0, 512)) != -1) {
    fileString += new String(in, 0, readNum);
   }
   
   writer = new FileWriter(new File(Environment.getExternalStorageDirectory(), “logFile” + new Date().getTime() + “.txt”), true);
   writer.write(fileString);
   result = true;
  } catch(Exception ex) {
   ex.printStackTrace();
  } finally {
   if(writer != null) {
    writer.close();
   }
   if(inputStream != null) {
    inputStream.close();
   }
  }
  return result;
 }
}
[/code]

 코드를 추가로 수정 후에 테스트를 제대로 못해봤는데, 문제가 있다면 남겨주시길 바랍니다.



1113960844.java

[안드로이드] EditText 에 OnClickListener 사용시 키보드 완료 버튼 클릭 문제점

 EditText 에 OnClickListener 이벤트를 정의해서 사용하는 경우가 있을 수 있습니다. 이러한 경우 터치 스크린 키보드에 나오는 ‘완료’ 버튼이 제대로 동작하지 않는 문제를 보았습니다. 원래 완료 버튼을 누르면 키보드가 사라져야 하는데 완료 버튼을 눌러도 사라지지 않게 되는 문제 입니다. 이러한 경우 setOnClickListener 로 정의한 곳에서 직접 처리를 해주거나, 직접 정의하지 않고 시스템적으로 처리 되도록 하면 문제는 해결 됩니다. 그렇기 때문에 EditText 의 setOnClickListener 를 사용할 때는 주의를 하셔야 할 것 같습니다.

 안드로이드 2.1 & 2.2 에서 테스트 되었습니다.