Category Archives: Android

[Java/Android] 유니크한 디바이스 아이디값 만들기

디바이스를 식별하기 위해 Unique Device ID값이 필요할 때가 있습니다. 쉽게 생각하면 아이폰에는 UDID(Unique Device Identifier)가 있습니다. 하지만 안드로이드에는 생각보다 간단한 문제가 아니더군요. 예를 들면 다음과 같은 방법으로 유니크한 시리얼 정보를 읽어올 수 있습니다.

Secure.getString(getContext().getContentResolver(), Secure.ANDROID_ID);

하지만 위의 방법은 때에따라 빈 값이 반환되는 경우가 있다고 합니다. (저도 경험해보진 않았음) 또한 안드로이드 디바이스는 제조사에서 커스터마이징을 대책없이 하는 경우가 많아 어떤값이 나올지 일관성도 유지하기가 어렵습니다.

그렇다면 몇가지 값을 조합해서 유니크한 시리얼을 만든다면 어떨까요? 좀 더 안정적으로 사용할 수 있지 않을까 생각합니다.

final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);

final String tmDevice, tmSerial, androidId;
tmDevice = "" + tm.getDeviceId();
tmSerial = "" + tm.getSimSerialNumber();
androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);

UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());
String deviceId = deviceUuid.toString();

위와같이 3가지 값을 조합하여 사용할 경우 좀 더 정확도 높은 유니크한 값을 만들어낼 수 있습니다.
사용자 삽입 이미지이런식으로 값이 출력됩니다. [샘플코드다운로드]

참고: http://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id

[Java/Android] try – catch 사용시에 Exception 안드로이드 Log로 출력하기

[code]public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

String nullValue = null;

try
{
nullValue.equals(“must be exception”);
}
catch(Exception e)
{
e.printStackTrace();
}

}[/code]
위의 같은 예제가 있다고 가정을 해봅시다. 위의 try – catch문은 이클립스에서 자동완성을 하여 자동으로 붙은 코드입니다. 위의 경우에는 기존의 Java어플리케이션에서는 문제가 없지만 안드로이드에서는 다음과 같은 문제가 있습니다.
사용자 삽입 이미지사실 이렇게 보니 또 문제가 없어보이네요. 아무튼 각설하고 왼쪽의 System.err를 보시면 안드로이드 고유의 Log를 사용하지 않고 에러가 출력되어 내가 의도한 로그의 Tag정보가 없는것이 현실입니다.

안드로이드에서 사용할 수 있는 형태로 로그를 출력하기 위해서는 다음과 같은 방법을 사용하시면 됩니다. 비슷한 예로 출력할 에러를 문자열 변수로 받고자 할때도 쓸 수 있습니다.
[code]try
{
nullValue.equals(“must be exception”);
}
catch(Exception e)
{
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
String exceptionAsStrting = sw.toString();

Log.e(“StackTraceExampleActivity”, exceptionAsStrting);
}[/code]
사용자 삽입 이미지이제 위와같이 에러가 출력이 됩니다. 물론 이클립스 ADT플러그인에서 설정을 일부러 끄신게 아니라면 로그를 더블클릭하여 에러 위치로 이동하는것 역시 가능합니다.

1346383891.zip
참고: http://stackoverflow.com/questions/1149703/stacktrace-to-string-in-java