Android.content.BroadcastReceiver
Android 앱은 Android 시스템에서 브로드캐스트 메시지를 보내거나 받을 수 있으며 다른 Android 앱의 경우 게시-구독 설계 패턴입니다. 관심 있는 이벤트가 발생할 때 이러한 브로드캐스트가 전송됩니다. 예를 들어 Android 시스템은 다양한 시스템 이벤트가 발생할 때 브로드캐스트를 전송합니다. 발생할 수 있습니다. 앱 또한 맞춤 브로드캐스트를 전송하여 다른 앱에 관심을 가질 만한 콘텐츠 (예: 일부 새로운 데이터에는 다운로드됨).
시스템에서는 방송 전송을 최적화하여 최적의 시스템 상태 따라서 방송 전송 시간은 보장 지연 시간이 짧은 프로세스 간 통신이 필요한 앱은 바인드된 서비스를 고려합니다.
앱은 특정 브로드캐스트를 수신하도록 등록할 수 있습니다. 방송이 전송될 때 시스템은 자동으로 브로드캐스트를 특정 유형의 방송을 수신할 수 있습니다.
일반적으로 브로드캐스트는 여러 앱에서 메시징 시스템으로 사용될 수 있습니다. 일반적인 사용자 플로우를 벗어나면 됩니다. 하지만 악용하지 않도록 주의해야 합니다. 브로드캐스트에 응답하고 시스템 성능 저하에 영향을 줄 수 있습니다
Examples
- SMS-Forward - 문자오면 다른 전화 또는 텔레그램 또는 웹훅 으로 전달.
볼륨변화 Event(Broadcast) 감지방법
아래와 같은 방법으로 볼륨의 변화를 브로드캐스트(Broadcast)로 감지할 수 있다.
class MediaVolumeChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int volume = (Integer)intent.getExtras().get("android.media.EXTRA_VOLUME_STREAM_VALUE");
}
}
// ...
MediaVolumeChangeReceiver _recv = new MediaVolumeChangeReceiver();
// ...
Context context = getApplicationContext();
IntentFilter filter = new IntentFilter();
filter.addAction("android.media.VOLUME_CHANGED_ACTION");
context.registerReceiver(recv, filter);
SCREEN_OFF Volume Event
볼륨변화를 화면이 꺼진상태(SCREEN_OFF
)에서 감지하는 방법에 대한 이슈:
No, This is not possible usually because broadcast receiver not work when screen light off because after screen off your volume button get lock and volume level not change.
Alternative Way to do this:
But you can achieve using run Media Player with zero sound in background infinite times that keep your volume button active always or you can use Wake Lock to achieve this.
But I don't suggest to do this method of long time because it totally drain the battery very fast. You can use these alternative method to do this for short period of time otherwise mobile battery get down fastly.
즉, android.media.MediaPlayer를 볼륨0으로 무한히 돌려야 한다. 베터리 소모에 대한 이슈는 별도로 검토해야 한다.
스크린(SCREEN) ON/OFF Event(Broadcast) 감지방법
아래와 같은 방법으로 화면이 꺼지고, 껴지는 이벤트를 브로드캐스트(Broadcast)로 감지할 수 있다.
class ScreenEventReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Screen on/off.
}
}
// ...
ScreenEventReceiver _recv = new ScreenEventReceiver();
// ...
Context context = getApplicationContext();
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.SCREEN_ON");
filter.addAction("android.intent.action.SCREEN_OFF");
context.registerReceiver(recv, filter);
AndroidManifest.xml의 application
태그 안에 아래와 같은 코드를 삽입하면 된다.
<receiver android:name=".ChangeReceiver" >
<intent-filter>
<action android:name="android.intent.action.ACTION_SCREEN_ON" />
<action android:name="android.intent.action.ACTION_SCREEN_OFF" />
</intent-filter>
</receiver>
Favorite site
- Broadcast Receiver에 대한 설명 1
- Android Tech: BroadcastReceiver
- 안드로이드에서 자주사용하는 Android Broadcast Action 이름 모음
- Stackoverflow: Android - Is there a broadcast action for volume changes?
- Headset button (ACTION_MEDIA_BUTTON) 감지하기
- 시스템에서 발송하는 Broadcast
- 벨/진동/무음 전환시 발생되는 action 이 궁금합니다
- System popup이 떠 있을 때 Activity가 volume설정 시점을 확인하는 방법
- Control Audio in Android (lesson 16)
- 안드로이드 Event 처리 메커니즘 2
- [추천] Android에서 Home key와 Power (Endcall) Key를 onKeyDown, onKeyUp으로 인식할 수 없는 이유
- 안드로이드 Broadcast/BroadcastReceiver
- Android ICS에서 ACTION_MEDIA_BUTTON BroadcastReceiver 등록 동작 처리
- 안드로이드 브로드캐스트 리시버와 관련된 인텐트의 액션들 3
- Android, BroadcastReceiver, headset controls
- Capture media button on Android >=4.0 (works on 2.3)
- Android BroadCastReceiver for volume key up and down