profile image

L o a d i n g . . .

반응형



안드로이드 브로드캐스트 리시버

Android BroadcastReceiver


안드로이드는 여러 애플리케이션 구성 요소에게 메시지를 전달하고 싶은 경우 브로드캐스팅을 사용한다.
브로드캐스트 수신자도 애플리케이션 구성 요소이므로새로운 브로드캐스트 수신자를 만들게 되면 매니페스트에 등록을 해야한다.
서비스처럼 브로드캐스트 수신자는 화면이 없으며, 매니페스트에 등록할 수 도 있지만 자바코드로도 등록하여 사용이 가능하다.
메시지는 인텐트 안에 넣어 전달이되고 수신하고 싶은 메시지가 있다면 그 메시지는 인텐트 필터를 이용해 등록을 한다.

Android uses broadband if it wants to deliver messages to multiple application components
Because broadcast recipients are also an application component, you must register with the manifest when you create a new broadcast recipient.
Like the service, broadcast recipients do not have a screen and can register with the manifest, but they can also register with Java code to use it.
If the message is placed inside the content and there are any messages you want to receive, use the content filter to register the message.
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~~

반응형
복사했습니다!