728x90
안녕하세요. 이번 시간에는 안드로이드 4대 컴포넌트 가운데 하나인 BroadCast Receiver를 코틀린 언어로 간단히 사용하는 예제를 만들어 보도록 하겠습니다.
BroadCast Receiver란?
Android apps can send or receive broadcast messages from the Android system and other Android apps, similar to the publish-subscribe design pattern.
공식 홈페이지에서 'Broadcast Receiver'에 대한 설명을 인용해보았습니다. 즉 저희가 만들고 있는 앱이 안드로이드 시스템이나 다른 앱으로부터 메시지를 받을 수 있으며 그 방법은 '게시-구독' 디자인 패턴과 흡사하다고 합니다.
구체적인 사용 사례로는 충전중이라던가 SNS를 받았다는 등 다양한 이벤트를 구독할 수 있습니다. 또한 시스템에서 발생시키는 이벤트 뿐만 아니라 개인이 이벤트를 등록할 수 있으니 사용처는 더욱 다양해집니다.
구체적인건 아래 공홈을 통해서 확인해보세요.
https://developer.android.com/guide/components/broadcasts
1. BroadCast 송신 및 수신 (커스텀)
자신만의 BroadCast를 송신하고 수신을하고 싶다면 LocalBroadcastManager를 사용해보도록 합시다. 사용하는 방법은 간단합니다. 송신측과 수신측 코드를 아래와 같이 작성해주면 됩니다.
송신측
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val broadcaster = LocalBroadcastManager.getInstance(this)
val send = findViewById<View>(R.id.send_broadcast) as Button
send.setOnClickListener {
Log.d("Tag", "클릭 실행 브로드캐스트 실행")
val intent = Intent("MyData")
intent.putExtra("phone", "010-0000-1111")
broadcaster.sendBroadcast(intent)
}
}
수신측 (커스텀 이벤트)
private val mMessageReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Log.d("Tag", "커스텀 브로드캐스트 실행 받음")
Toast.makeText(context, intent.getStringExtra("phone"), Toast.LENGTH_LONG).show()
}
}
수신측 (시스템 이벤트)
var br: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BATTERY_CHANGED) {
val toast = Toast.makeText(context, "Battery status is changed.", Toast.LENGTH_LONG)
toast.show()
} else if (intent.action == Intent.ACTION_SCREEN_ON) {
val toast = Toast.makeText(context, "Screen on.", Toast.LENGTH_LONG)
toast.show()
} else if (intent.action == "example.test.broadcast") {
val toast = Toast.makeText(context, "Customize broadcast!", Toast.LENGTH_LONG)
toast.show()
}
}
}
브로드 캐스트는 생명주기에 따라 등록 및 해제를 시켜줘야 합니다.
protected void onStart() {
super.onStart();
LocalBroadcastManager.getInstance(this).registerReceiver((mMessageReceiver),
new IntentFilter("MyData")
);
}
@Override
protected void onStop() {
super.onStop();
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
}
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("Tag", "커스텀 브로드캐스트 실행 받음");
Toast.makeText(context, intent.getStringExtra("phone"), Toast.LENGTH_LONG).show();
}
};
@Override
protected void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
filter.addAction(Intent.ACTION_SCREEN_ON);
registerReceiver(br, filter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(br);
}
작업 결과물은 아래와 같습니다.
'안드로이드 코틀린' 카테고리의 다른 글
[Kotlin][Android] 텍스트뷰 생략 옵션 동적으로 변경하기 (0) | 2022.02.15 |
---|---|
[Kotlin][Android] 녹음기능 구현하기 (0) | 2022.02.10 |
[Kotlin][Android] 더보기가 있는 텍스트뷰 만들기 (0) | 2022.02.03 |
[Kotlin][Android] 이미지 회전 (0) | 2022.01.30 |
[Kotlin][Android] url로 가져온 이미지 다운로드하기 (0) | 2022.01.22 |