2012년 1월 1일 일요일

Package 삭제 추가에서 PackageName알아내기

등록된 BroadcastReceiver로 Package의 추가 삭제 intent가 전달되는 데요..
packagename은 Uri형태로 전달 됩니다.

즉, package:com.helloaxl.xxx 형태인데요...

이때 packageName을 정확히 얻어 올려면,

intent.getData().getSchemeSpecificPart() 를 호출해야 com.helloaxl.xxx를 얻어 올수 있답니다.

Package 추가 삭제 알아내기

 Manifest 파일에 다음과 같이 receiver를 등록합니다.

<receiver android:name=".XXXReceiver">
   <intent-filter>
     <action android:name="android.intent.action.PACKAGE_ADDED" />
     <action android:name="android.intent.action.PACKAGE_REMOVED" />
     <data android:scheme="package" />
  </intent-filter>
</receiver>

여기서 가장 중요한것은 <data android:scheme="package" />...
빼먹지 마시라는거...
 

2011년 12월 31일 토요일

logcat option 및 filter 제대로 셋팅하기

1. cmd 실행
2. chcp 65001 실행
3. adb logcat  option filter 실행

-s              Set default filter to silent.
Like specifying filterspec '*:s'
-f <filename>   Log to file. Default to stdout
-r [<kbytes>]   Rotate log every kbytes. (16 if unspecified). Requires -f
-n <count>      Sets max number of rotated logs to <count>, default 4
-v <format>     Sets the log print format, where <format> is one of:

brief process tag thread raw time threadtime long

-c              clear (flush) the entire log and exit
-d              dump the log and then exit (don't block)
-t <count>      print only the most recent <count> lines (implies -d)
-g              get the size of the log's ring buffer and exit
-b <buffer>     request alternate ring buffer
('main' (default), 'radio', 'events')
-B              output the log in binary
<Filter Spec.....>
filterspecs are a series of
<tag>[:priority]

where <tag> is a log component tag (or * for all) and priority is:
V    Verbose
D    Debug
I    Info
W    Warn
E    Error
F    Fatal
S    Silent (supress all output)

<tag>[:priority] 이부분에 대한 설명을 하자면...

public static final String TAG = "HelloAxlActivity"; <---- 이부분에서 선언한 태크
Log.d(TAG, "hello...."); <--- 이렇게 프로그램에서 사용하죠..

adb logcat HelloAxlActivity 가 되는 거죠...

그런데, 이상하죠.. 온동네 tag들이 다나옵니다. 이거 하라는 데로 했는데... 헐...
한가지가 더 있답니다.
마지막으로 젤 중요한것은요... 저도 정말 알고 싶어 했던거...

adb logcat HelloAxlActivity *:S

뒤에 *:S 로 HelloAxlActivity이후 한칸띈 후 마무리를 해주셔야 비로소 HelloAxlActivity Tag만을 가진 로그가 나옵니다. (이거 버근가?)

암튼, priority는 tag이후에 붙여 주시면 되겠습니다.

adb logcat HelloAxlActivity:I *:S  이렇게요...

이것과 똑같이 option을 이용해서 할 수도 있는데요...

adb logcat -s HelloAxlActivity:I

-s 는 silent로 만드는 option입니다.

위와 같이 하면 중간에
--------- beginning of /dev/log/system
.....
--------- beginning of /dev/log/main

이런식으로 두가지의 logfile의 내용을 한꺼번에 보여주는데요..

이는 옵션을 주어 버퍼를 선택할 수 있습니다.
adb logcat -b main -s HelloAxlActivity:I 이런식으로요..

이상이구요. 질문있으시면 알려주세요.

2011년 11월 20일 일요일

Failed Binder Transaction!!!

Activity간의 data 이동시 간혹

JavaBinder가 "Failed Binder Transaction!!!" 라는 신음을 내는데..

이는 안드로이드의 data 크기의 제약사항 때문에 발생하는데.. 그 크기가 약100Kb미만이랍니다.

데이터 사이즈를 어떻게든 줄여야 하는데.....

Intent에 extra data에 넣는 부분도 줄여야 하는데.. bitmap의 경우에는 당연히 external sdcard를 이용하여 URI로 넣어 주어 사이즈를 줄어야 한다.

제가 겪은 바로는 RemoveViews에도 이와 같은 현상이 일어 나는데...

이때도 마찬가지로 setImageViewBitmap() 대신 setImageViewUri()로 바꿔 넣어 주어야 한다.

그럼 어떻게 바꿀수 있냐고..... 다음에... 저도 해결좀 하구요..

2011년 11월 19일 토요일

Android Service 의 형태

Android에서 Background processing을 위해서는  Service를 사용해야 하는데,

service는 started service와 bind service로 나뉘며... 지금은 started service를 말하고자 한다.

onStartCommand()가 호출되고 나면 service의 형태가 어떤지를 integer값을 리턴하여 시스템에게 알려주어야 하는데 다음 3가지 정도면 원하고자 하는 서비스를 만들 수 있다.

서비스는 언제든 시스템에 의해 kill될 수 있으며, 상황이 나아지면 다시 시작된다.

1. START_STICKY
    - 서비스 종료시 시스템이 다시 서비스를 재시작 하게 되지만 종료시 넘어 왔던 intent 는 null로 초기화된다.

2. START_NOT_STICKY
   - 서비스 종료 후 자동으로 이 서비스를 시작하지는 않는다.

3. START_REDELIVER_INTENT
   - 서비스 종료 후 다시 재시작할 때 서비스 시작당시 넘어온 인텐트를 다시 넘겨 준다.

2011년 11월 17일 목요일

IMEI (International Mobile Equipment Identity) 란?

각각의 android store마다 불법복제 방지를 위해 license를 체크하는데,
삼성앱스에서는 단말기계마다 고유한 번호인 IMEI(International Mobile Equipment Identity, 코드14자 + 체크용1자=15자의 숫자)를 체크한다.

자기 android 폰의 IMEI를 체크하는 방식은 다음과 같다.

import android.telephony.TelephonyManager;
import android.content.Context;
 
{
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
  Log.d(TAG, " IMEI=" + telephonyManager.getDeviceId());
}
 
1. 우선 TelephonyManager를 얻고
2. getDeviceId()를 call하면 된다.
 
위의 code를 android 소스에 넣어 한번 찍어 보면 끝...

2011년 11월 16일 수요일

미얀마인들의 수호신이랍니다.

말레이시아 페낭의 미얀마 사원에 가면 지구본을 발로 밟고 있는 괴상하게 생긴 동물 2마리가 있다. 이것은 미얀마인들의 수호신으로 여러가지 형상의 동물모양을 하고 있어 이채롭다. 코는 코끼리코, 뿔은 용뿔, 발은 말발굽 그리고 몸통은 생선등으로 이루어져있다. 참고로 이 지구본은 기부함이다.