BroadcastReceiver 간단 정리
안드로이드에는 BroadcastReceiver 라는 Callback 이벤트를 처리해주는 컴포넌트가 제공됩니다.
쉽게말해서, A라는 앱을 만들었는데,
문자가 왔을 때 어떤 데이터를 받고 싶다던가 배터리가 50% 이하가 되었을 때 뭔가 변화를 주고 싶다고 한다면
SMS 앱이나 배터리체크 앱에서 어떤 이벤트를 데이터와 함께 날리게 되고,
A에서는 그 이벤트와 데이터를 받아서 원하는 기능을 처리하도록 할 수 있다는 것입니다.
위에서 언급한 이벤트처리를 복잡하지 않고 쉽게 처리해주는 녀석이 BroadcastReceiver 라는 컴포넌트 인 것입니다.
아래에 2가지 방법에 대한 예시를 올립니다.
1. BroadcastReceiver 클래스를 상속 (AppWidgetProvider 도 가능, 아마 BroadcastReceiver를 가지고 있겠지..)
onReceive() 를 Override해서 기능 정의
androidManifest.xml에 등록되어 있어야 함.
* androidManifest 이용해서 등록하면, 명시적으로 해제해줄 수는 없다. (unRegisterReceiver 불가능)
(onReceive() 메소드가 완료되면 가비지 컬렉션 대상이 되서 해지될지도... 언제 될지는 모름...)
ex) <receiver android:name=".favorite.MissedCallWidget" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="lge.intent.action.MISSED_CALLS" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/missed_call_widget_info" />
2. Actvity, Service, ContentProvider에 registerReceiver() 내에서 등록한다.
* onDestory() 에서 this.registerReceiver() 해줬던것을 해제가능 (메모리 누수 방지 효과도 있음)
ex) 이미 있는 action이 아니라, 새로 만든 custom action을 이용한 예시
public static final String ACTION_KEY_CODE = "com.ironmask.home.KEYCODE_ALERT";
private BroadcastReceiver mKeyCodeReceiver = null;
onCreate()
{ .........
MyregisterReceiver();
.........
}
onDestory()
{ ...........
this.unRegisterReceiver(mKeyCodeReceiver);
MyregisterReceiver() {
if (mKeyCodeReceiver != null)
return;
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_KEY_CODE);
this.mKeyCodeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent keyintent) {
String action = keyintent.getAction();
if (ACTION_KEY_CODE.equals(action)) {
...
};
this.registerReceiver(this.mKeyCodeReceiver, filter);
}
미리 Broadcast를 제공하는 App에서 아래와 같이 수행해 놓으면, 위 Receiver가 동작!!
(SMS, Call 등 이미 기본 안드로이드 App에서 제공되는 것들도 많다.)
Intent keyCodeAlert = new Intent("com.ironmask.home.KEYCODE_ALERT");
keyCodeAlert.putExtra("key_code", keyCode);
mContext.sendBroadcast(keyCodeAlert);
--> 위의 예시가 맞는지 다시 확인 필요...
즉, 2번 예시의 경우도, com.ironmask.home.KEYCODE_ALERT이라는 액션을 가진 Activity 내에서
위의 과정이 있어야 한다...
'나는 프로그래머다! > Java & Android' 카테고리의 다른 글
안드로이드 리소스 정책 #2 (0) | 2016.04.19 |
---|---|
안드로이드 리소스 정책 #1 (0) | 2016.04.19 |
[JAVA] Primitive type과 Reference type 그리고 Object 클래스 (0) | 2016.04.12 |
Eclipse 에서 Tap을 Space로 변경하기 (0) | 2016.03.31 |
PreferenceActivity 와 Fragment (0) | 2016.03.10 |
안드로이드 View 클래스 관련 깨알같은 스펙정보 (0) | 2016.01.21 |
안드로이드 App Flag_Activity 란? (0) | 2016.01.21 |
App 위젯 만들기 (in Eclipse) (0) | 2016.01.14 |
JNI & 예제 (0) | 2013.04.01 |
make / 모듈 추가 방법 (0) | 2013.04.01 |