Platform/Android

[BroadcastReceiver]

개랭갱깽스타 2020. 11. 5. 09:59

브로드캐스트 broadcast : 방송하다. 방송은 항상 송신되고 있다. 필요한 사람만 해당 채널을 수신하면 된다.

브로드캐스트리시버 broadcastReceiver: 방송에 귀 기울이고 있는 수신자 / 필요에 의해 방송도 가능

> 코드레벨

> AndroidManifest

 

수신하고 싶은 채널에 가입

1. 암시적 브로드 캐스트

더보기

암시적 브로드 캐스트(implicit broadcast) 란?

  • 특정 앱을 대상으로 하지 않는 broadcast
  • ex) ACTION_BATTERY_CHANGED: 기기 상의 배터리 정보 변경 사실을 알려주기 위해 등록된 모든 리스너로 전송되기 때문에 암시적 브로드 캐스트

(1) 코드에서

val filter = IntentFilter()
filter.addAction(Intent.ACTION_BATTERY_CHANGED)
filter.addAction(Intent.ACTION_SCREEN_ON)

 

 

(2) AndrodiManifest.xml 에서

- Android 8.0(API 26)버전부터 암시적브로드캐스트(implicit broadcast)의 경우 AndrodiManifest.xml에서 receiver 를 등록할 수 없다.

  > 예외도 있다. developer.android.com/guide/components/broadcast-exceptions

- Android 8.0(API 26) 이전 버전까지는 아래 방법 가능

<receiver android:name=".BatteryBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_CHANGED"/>
        <action android:name="android.intent.action.SCREEN_ON"/>
    </intent-filter>
</receiver>

developer.android.com/about/versions/oreo/background.html#broadcasts

 

백그라운드 실행 제한  |  Android 개발자  |  Android Developers

Android 8.0 이상을 대상으로 하는 앱에 대한 새로운 백그라운드 제한.

developer.android.com

 

2. 명시적브로드캐스트

더보기

명시적 브로드 캐스트(explicit broadcast) 란?

  • 특정 앱을 대상으로 하는 broadcast
  •  
  • (1) 코드에서
val filter = IntentFilter()
filter.addAction(Intent.ACTION_BATTERY_CHANGED)
filter.addAction(Intent.ACTION_SCREEN_ON)

 

(2) AndrodiManifest.xml 에서

<receiver android:name=".CustomBroadcastReceiver">
    <intent-filter>
        <action android:name="com.gaeng0517.broadcast"/>
    </intent-filter>
</receiver>       

 

 실제 시청하고 싶은 채널을 고를 때

BroadcastReceiver

override fun onReceive(context: Context?, intent: Intent?) {
     if (intent?.action.equals(Intent.ACTION_BATTERY_CHANGED)) {
         val toast = Toast.makeText(context, "Battery status is changed.", Toast.LENGTH_LONG)
         toast.show()
     } else if (intent?.action.equals(Intent.ACTION_SCREEN_ON)) {
         val toast = Toast.makeText(context, "Screen On", Toast.LENGTH_LONG)
         toast.show()
     }
}

 

CustomBroadcastReceiver

override fun onReceive(context: Context?, intent: Intent?) {
    if(intent?.action.equals("com.gaeng0517.broadcast")) {
        Toast.makeText(context, "Customize broadcast!", Toast.LENGTH_LONG).show()
    }
}

 

 

. 참고

brunch.co.kr/@mystoryg/48

 

브로드캐스트 리시버 (BroadcastReceiver)

4대 컴포넌트 | 브로드캐스트 리시버  (BroadcastReceiver) 브로드캐스트는 단어 그대로 방송을 하는 것이다. 방송의 특징을 생각해보면 방송국은 불특정 다수에게 송신을 하고 필요한 사람은 수신하

brunch.co.kr

 

반응형

'Platform > Android' 카테고리의 다른 글

[UI테스트] UIAutomator2.0  (0) 2020.11.10
[adb] 명령어  (0) 2020.11.09
[Error] andoirdTest class 를 찾을 수 없을 때  (0) 2020.11.04
[DP, px, ...]  (0) 2020.10.27
[GooglePlayStore] 앱 올리기  (0) 2020.10.20