안드로이드 브로드캐스트 리시버
Android BroadcastReceiver
public class BroadcastReceiver extends android.content.BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
BroadcastReceiver를 상속받은 리시버 클래스를 만든다.
그리고 onReceive 메소드를 오버라이딩하는데, 이 클래스에서 수신받은 메시지를 처리해도 된다.
하지만 나는 그렇게 하지 않닸다.
Create Receiver class that implemented BroadcastReceiver
And override the onReceive method, which allows you to process messages received from this class
but i didn't
public class Static_BroadcastReceiver_MainActivity extends AppCompatActivity {
private final String BROADCAST_MESSAGE = "test";
private BroadcastReceiver mReceiver = null;
private int number = 0;
private Button send;
@Override
protected void onResume() {
super.onResume();
registerReceiver();
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_static__broadcast_receiver__main);
send = (Button) findViewById(R.id.send);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickMethod(v);
}
});
}
// 브로드캐스트를 발생시킨다.
// Occurring Broadcast
public void clickMethod(View v){
// 1. 전달할 메세지를 담은 인텐트 생성
// 1. Create an Intent with a message of forward
// 2. DATA를 잘 전달받는지 확인할 수 있게 key, value 넣기
// 2. Key, value to ensure that data is well received
// 3. sendBroadcast(intent) 메소드를 이용해서 전달할 intent 넣고, 브로드캐스트한다.
// 3. Use method to add intent to deliver and broadcast
Intent intent = new Intent(BROADCAST_MESSAGE);
intent.putExtra("value", number);
sendBroadcast(intent);
number++;
}
// 코드상으로 브로드캐스트를 등록한다.
// registers a broadcast in code
private void registerReceiver() {
// 1. Intent filter를 만든다
// 1. create an Intent filter
// 2. Intent filter에 action을 추가한다.
// 2. add action to the intent
// 3. BroadCastReceiver를 익명클래스로 구현한다.
// 3. implement BroadCastReceiver as an anonymous class
// 4. Intent filter와 BroadCastReceiver를 등록한다.
// 4. Intent filter and BroadCastReceiver register
if (mReceiver != null) return;
final IntentFilter theFilter = new IntentFilter();
theFilter.addAction(BROADCAST_MESSAGE);
this.mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int receviedData = intent.getIntExtra("value",0);
if (intent.getAction().equals(BROADCAST_MESSAGE)) {
Toast.makeText(context, "recevied Data : " + receviedData, Toast.LENGTH_LONG).show();
}
}
};
this.registerReceiver(this.mReceiver, theFilter);
}
// 코드상으로 브로드 캐스트를 종료한다.
// end broadcast by code
private void unregisterReceiver() {
if (mReceiver != null){
this.unregisterReceiver(mReceiver);
mReceiver = null;
}
}
}
브로드캐스트 수신자에 의해 수신을 받아야할 메시지는 인텐트를 이용한다.
매니페스트에 인텐트필터를 등록하여 사용하여도 되지만, 한번 등록하면 수정이 불가능 하기 때문에
이렇게 자바로 인텐트필터를 등록하여 사용하게 되면 수정이 가능하다.
위의 수신자 클래스 인스턴스를 생성하여 리시버 클래스의 메소드를 오버라이드하였다.
브로드캐스트수신의 경우 끝났을 경우 다시 초기화 시키는 것이 좋다고 책에서 보았다. (구글링하다가 보았던가...?)
Messages that need to be received by the broadcast receiver use the content.
You can register and use the Intent Filter with the manifest, but once you register it, it is not possible to modify it.
If the Intent Filter is registered and used as a magnetic field, it can be modified.
The method of the receiver class was overridden by creating the above recipient class instance.
In the book, the book said that it is good to reinitialize the broadcast when it is over. (Did you see it while you were googling)
oh~~~i'm so lonely~~
'[# 2]…My DevelopStory' 카테고리의 다른 글
안드로이드 AsyncTask 사용하기 ~ use the Android AsyncTask (0) | 2019.03.24 |
---|---|
안드로이드 쓰레드, 핸들러 사용하기 ~ Android use the Thread, Handler (0) | 2019.03.20 |
안드로이드 기본 정리 ~ Android Basic summary (0) | 2019.03.18 |
안드로이드 인플레이션 이해하기 ~ Understanding Android Inflation (0) | 2019.03.08 |
안드로이드 아답터 이해하기 ~ understanding Android Adapter (0) | 2019.03.07 |