안드로이드 4대 컴포넌트 중 하나인 브로드캐스트 리시버는 어떠한 이벤트가 발생되었을 때 그에 관한 메시지를 받을 수 있게 한다.
예를 들면 기기 재부팅, 핸드폰 충전 등 시스템 이벤트가 발생했을 경우 브로트캐스트를 전송하며, 이를 수신하여 작업을 처리할 수 있다.
이외의 자세한 내용은 공식문서를 참고 바랍니다.
https://developer.android.com/guide/components/broadcasts?hl=ko#receiving-broadcasts
사용 방법
충전기 연결 시 Toast 메시지 출력 예제
1. MyBroadcastReceiver.kt
class MyBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
//TODO your task
if(Intent.ACTION_POWER_CONNECTED == intent.action){
Toast.makeText(context, "전원 연결 확인", Toast.LENGTH_SHORT).show()
}
}
}
2. Manifest
<receiver android:name=".MyBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
</intent-filter>
</receiver>
intent-filter에는 수신자가 구독할 이벤트를 넣어준다.
그러나 API 26 이상부터는 제 한이 면제되는 몇 가지를 제외하고는 Manifest 대신 다음과 같이 선언해야 한다.
val br: BroadcastReceiver = MyBroadcastReceiver()
val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION).apply {
addAction(Intent.ACTION_POWER_CONNECTED)
}
registerReceiver(br, filter)
위의 코드는 적절한 클래스에 선언해 주면 된다. (MainActiviy 등)
브로드캐스트 전송
시스템 이벤트와 같이 브로드캐스트를 수신하는 방법도 있지만, 사용자가 버튼 클릭과 같은 어떠한 이벤트를 발생시켰을 때에도 브로드캐스트에 접근할 수 있다.
class MyBroadcastReceiver : BroadcastReceiver() {
object myReceiver{
val MY_ACTION = "com.example.test.action.ACTION_MY_BROADCAST"
}
override fun onReceive(context: Context, intent: Intent) {
//TODO your task
if(Intent.ACTION_POWER_CONNECTED == intent.action){
Toast.makeText(context, "전원 연결 확인", Toast.LENGTH_SHORT).show()
}
if(myReceiver.MY_ACTION == intent.action){
Toast.makeText(context, "나의 브로드캐스트", Toast.LENGTH_SHORT).show()
}
}
}
val br: BroadcastReceiver = MyBroadcastReceiver()
val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION).apply {
addAction(Intent.ACTION_POWER_CONNECTED)
addAction(MyBroadcastReceiver.myReceiver.MY_ACTION)
}
registerReceiver(br, filter)
Intent().also { intent ->
intent.setAction(MyBroadcastReceiver.myReceiver.MY_ACTION)
intent.putExtra("data", "Notice me senpai!")
sendBroadcast(intent)
}
'안드로이드 > 4대 컴포넌트' 카테고리의 다른 글
[안드로이드] Content Provider (0) | 2023.11.23 |
---|