일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 피보나치
- MFC
- 리틀포레스트
- darkmode
- 제곱근
- Dokka
- Java
- DataStructure
- 동적프로그래밍
- stack
- LRU
- devicedriver
- AfxMessageBox
- 형변환
- SPI
- android
- FirebaseAuth
- Collection
- Dialog
- 쌓기게임
- WebView
- 코인거스름돈
- Kotlin
- DynamicProgramming
- 보늬밤
- QoS
- math
- memory
- synergy
- 피요모리2
- Today
- Total
퉁탕퉁탕 만들어보자
Android broadcast 수신 본문
broadcast를 내 앱에서 듣고 처리할 수 있다.
방법은 두가지이다.
첫번째 Android Manifest 에서 선언하는 방식
우선 broadcastReceiver를 extend하는 class를 구현한다.
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 브로드캐스트 받았을 때 처리
}
}
AndroidManifest.xml 파일에 아래와같이 리시버를 등록한다.
<application>
<receiver android:name=".internal.util.MyBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BATTERY_LOW"/>
</intent-filter>
</receiver>
</application>
그러면 해당 Action에 해당하는 브로드캐스트가 왔을때 onReceive() 함수가 불리게 되..
야 하지만?
26이상을 타게팅 하면, 암시적 인텐트로 받을 수 있는 broadcast 가 많이 막혔다.
대부분 이런 에러가 찍히게 된다.
W/BroadcastQueue: Background execution not allowed: receiving Intent
짱남...
자 그래서 이제 이런 방식은 안되고, activity에서 등록해보자.
BroadcastReceiver broadcastReceiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
// register
getContext().registerReceiver(broadcastReceiver, filter);
// unregister
getContext().unregisterReceiver(broadcastReceiver);
그러면 이제 이 register 된 이후에 broadcast를 받을 수 있고, unregister하면 그 다음부터는 못받게 된다.
onResume에서 등록하고, onPause에서 해제하는 식으로 하면 백그라운드에서 받지 않고 포그라운드에서만 받아서 효율적으로 처리할 수 있다.
만약 register하는 getContext()대신 application context에 등록한다면, 해당 activity의 범위가 아닌 activity전체 범위에서 수신하게 된다.
몇가지 manifest 에서 등록이 허용되는 broadcast receiver가 불리면?
onReceive함수가 불리는 동안은 포그라운드 상태로 간주 -> 동작이 끝나고 리턴하면다시 백그라운드 상태다
자세한 내용 더보기
https://developer.android.com/guide/components/broadcasts?hl=ko
'Computer > Android' 카테고리의 다른 글
SoundPool을 활용해서 sound 효과 주기 (0) | 2022.07.29 |
---|---|
ImageButton Ripple 주기 (0) | 2022.07.29 |
Android Webview Javascript interface (1) | 2022.05.08 |
View Binding (0) | 2022.05.08 |
Android Rendering? (0) | 2022.05.08 |