시리즈

[Android] Broadcast

20190816
android
broadcast

Broadcast receivers

Broadcasts : 안드로이드 시스템과 안드로이드 앱에서 다른 앱 또는 앱 구성요소들의 기능에 영향을 끼칠 수 있는 이벤트가 발생하면 보내는 메시지.
예를 들어서, 안드로이드 시스템은 디바이스가 부팅될 때, 헤드폰이 연결되거나 연결이 끊어졌을 때 system broadcast 를 보냅니다.
안드로이드 앱도 다른 앱에서 관심가질 만한 새로운 데이터가 다운로드 되었을 때 custom broadcast를 보냅니다.
일반적인 유저의 흐름을 벗어나서 앱 사이의 메시지 시스템으로 broadcast를 사용할 수 있습니다.
broadcast는 broadcast receiver를 가진 앱 또는 앱 구성요소에서 받을 수 있습니다. BroadcastReceiver는 모든 브로드캐스트 인텐트들을 받는 코드의 기초 클래스입니다.

시스템 브로드캐스트

시스템은 각종 시스템 이벤트가 발생하면 브로드캐스트를 자동으로 보냅니다. 시스템 브로드 캐스트는 그 이벤트를 받도록 구독(subscribe) 한 모든 앱에 보내집니다.
브로드캐스트 메시지는 Intent 객체로 래핑됩니다. 인텐트는 추가 정보를 가지는 번들을 포함할 수도 있습니다.
https://developer.android.com/guide/components/broadcasts

사용

시작

패키지에서 File > New > Other > Broadcast Receiver
옵션들 Exported : 앱 바깥에서 브로드캐스트를 받을 수 있도록 허가 Enabled : 시스템이 리시버를 인스턴스화 할 수 있도록 허가.
매니페스트 파일로 가면 application 블록 안에 위와 같은 receiver 블록 코드가 들어간 것을 확인할 수 있습니다.

리시버 등록

브로드캐스트를 받으려면 앱을 등록해야 합니다. 정적 또는 동적으로 등록할 수 있습니다.
Android 8.0(API 26) 부터 몇 가지 예외 를 제외하면 더 이상 정적 리시버를 사용해서 시스템 브로드캐스트를 받는 것은 불가능합니다.
매니페스트 파일에서 생성된 리시버 블록을 지워도 됩니다.
리시버 인스턴스와, 인텐트 필터 인스턴스를 만듭니다. 그 다음 인텐트 필터에 받을 인텐트를 지정합니다.
리시버를 등록합니다.
리시버가 필요없어지면 등록을 해제해야 합니다. onDestroy() 에서 하면 됩니다.

액티비티가 아니라 프래그먼트라면?

리시버를 프래그먼트 단위로 사용하고 싶을 때가 있습니다. 그런 경우에는 onResume()에서 리시버를 등록하고 onPause() 에서 해제해야 합니다. 또, this 대신 getActivity(), requireActivity() 를 사용해야 합니다.

onReceive() 구현

등록한 브로드캐스트를 받았을 때 onReceive() 메소드가 실행됩니다.
intent 안에 들어있는 액션에 따라서 하고 싶은 일을 하면 됩니다.
아래는 액션에 따라서 토스트 메시지를 띄우는 예시 입니다.

커스텀 브로드캐스트

시스템 브로드캐스트 말고 커스텀 브로드캐스트를 앱에서 보내고 받을 수 있습니다. 커스텀 브로드캐스트를 보내는 3가지 방법이 있습니다.
https://developer.android.com/guide/components/broadcasts#sending-broadcasts
브로드캐스트 메시지는 Intent 객체로 래핑됩니다. 인텐트 액션 문자열은 앱 자바 패키지 이름의 문법을 사용하고 각 브로드캐스트 이벤트를 고유하게 식별할 수 있습니다.
커스텀 브로드캐스트를 위해서, Intent 액션을 정의해야 합니다. Intent 객체를 만들고 브로드캐스트를 위에 있는 3가지 방법 중에 하나를 이용해서 실행해야 합니다. broadcast들은 그 액션을 등록한 BroadcastReceiver를 가진 앱들이 받게 됩니다.

사용

예시로 Local 브로드캐스트를 보내고 받아보겠습니다.
먼저 인텐트 액션으로 사용할 문자열을 생성합니다.
브로드캐스트에 사용할 인텐트 액션은 고유해야 하기 때문에 어플리케이션 아이디를 사용하는 방법이 주로 사용됩니다.
인텐트는 startActivity(Intent) 에서도 사용되지만 액티비티를 시작할 때 사용되는 인텐트는 브로드캐스트 리시버에서 받지 않습니다.
다음은 로컬 브로드캐스트를 보내는 함수입니다.
해제도 하면 됩니다. onDestroy() 메소드 내부에 선언합니다.
프래그먼트의 경우에도 시스템 브로드캐스트를 처리하듯이 하면 됩니다.
onReceive() 내부에 브로드캐스트에 응답하는 코드를 넣어주면 됩니다.

.

piano (press key Q)

Categories

flutter ( 82 ) dart ( 34 ) android ( 32 ) kotlin ( 11 ) plugin ( 8 ) provider ( 8 ) vim ( 7 ) bloc ( 6 ) iOS ( 6 ) state management ( 6 ) 플러터 ( 6 ) PS ( 5 ) algorithm ( 5 ) architecture ( 5 ) async ( 5 ) getx ( 5 ) java ( 5 ) API ( 4 ) BOJ ( 4 ) class ( 4 ) daily ( 4 ) git ( 4 ) golang ( 4 ) memo ( 4 ) riverpod ( 4 ) state ( 4 ) stream ( 4 ) test ( 4 ) web ( 4 ) widget ( 4 ) windows ( 4 ) HTTP ( 3 ) androidX ( 3 ) app state ( 3 ) context ( 3 ) crash ( 3 ) db ( 3 ) editor ( 3 ) error ( 3 ) extension ( 3 ) github ( 3 ) hive ( 3 ) ide ( 3 ) package ( 3 ) pubspec ( 3 ) python ( 3 ) syntax ( 3 ) vscode ( 3 ) app icon ( 2 ) await ( 2 ) chocolatey ( 2 ) consumer ( 2 ) cp949 ( 2 ) deployment ( 2 ) dev ( 2 ) flavor ( 2 ) gesture ( 2 ) globalkey ( 2 ) go ( 2 ) google ( 2 ) hack ( 2 ) js ( 2 ) json ( 2 ) key ( 2 ) keystore ( 2 ) list ( 2 ) listview ( 2 ) lock ( 2 ) mac ( 2 ) map ( 2 ) navigation ( 2 ) nosql ( 2 ) project ( 2 ) pub ( 2 ) recyclerview ( 2 ) rxdart ( 2 ) sdk ( 2 ) selector ( 2 ) setting ( 2 ) size ( 2 ) soc ( 2 ) synchronized ( 2 ) tdd ( 2 ) tip ( 2 ) version ( 2 ) viewmodel ( 2 ) vundle ( 2 ) webview ( 2 ) xcode ( 2 ) yaml ( 2 ) ( 2 ) 플러터 단점 ( 2 ) 16.0 ( 1 ) 2.0 ( 1 ) 2023 ( 1 ) AATP2 ( 1 ) ChangeNotifierProvider ( 1 ) Example ( 1 ) Guava ( 1 ) ImageReader ( 1 ) Mo's algorithm ( 1 ) OAuth2 ( 1 ) OpenGL ( 1 ) Oreo ( 1 ) ProgressBar ( 1 ) REST API ( 1 ) Trie ( 1 ) activity ( 1 ) adaptive ( 1 ) android P ( 1 ) android context ( 1 ) android11 ( 1 ) apktool2 ( 1 ) app exit ( 1 ) append ( 1 ) appicon ( 1 ) arkit ( 1 ) array ( 1 ) asciidoc ( 1 ) async * ( 1 ) async* ( 1 ) audio ( 1 ) authorization ( 1 ) await for ( 1 ) behaviorsubject ( 1 ) beta ( 1 ) binary ( 1 ) binarysearch ( 1 ) blender ( 1 ) book ( 1 ) bottomsheet ( 1 ) break ( 1 ) broadcast ( 1 ) browser ( 1 ) bubbles ( 1 ) bug ( 1 ) build ( 1 ) buildcontext ( 1 ) buildnumber ( 1 ) bundle ( 1 ) button ( 1 ) bytecode ( 1 ) cache ( 1 ) camera2 ( 1 ) cameramanager ( 1 ) cd ( 1 ) chrome ( 1 ) ci ( 1 ) circle ( 1 ) clean ( 1 ) clean architecture ( 1 ) cli ( 1 ) clip ( 1 ) clipboard ( 1 ) cloud ide ( 1 ) cmdlet ( 1 ) code ( 1 ) coding test ( 1 ) command ( 1 ) comparator ( 1 ) complexity ( 1 ) concurrency ( 1 ) conditional ( 1 ) const ( 1 ) constraint ( 1 ) constraintlayout ( 1 ) controlc ( 1 ) controlv ( 1 ) converter ( 1 ) copy ( 1 ) copy project ( 1 ) coupling ( 1 ) coverage ( 1 ) cp ( 1 ) css ( 1 ) cupertino ( 1 ) cursor ( 1 ) cv ( 1 ) data class ( 1 ) data structure ( 1 ) dataBinding ( 1 ) database ( 1 ) debounce ( 1 ) decompile ( 1 ) delegate ( 1 ) deno ( 1 ) design pattern ( 1 ) development ( 1 ) device ( 1 ) di ( 1 ) dialog ( 1 ) dio ( 1 ) drawable ( 1 ) drug ( 1 ) emmet ( 1 ) encoding ( 1 ) english ( 1 ) entries ( 1 ) environment ( 1 ) equality ( 1 ) equatable ( 1 ) euc-kr ( 1 ) euckr ( 1 ) exit ( 1 ) expand ( 1 ) expanded ( 1 ) export ( 1 ) extension method ( 1 ) facade ( 1 ) fake ( 1 ) field ( 1 ) figma ( 1 ) final ( 1 ) fixed ( 1 ) flutter pub ( 1 ) flutter web ( 1 ) flutter_inappwebview ( 1 ) flutter_test ( 1 ) flutterflow ( 1 ) fold ( 1 ) fonts ( 1 ) form ( 1 ) frame ( 1 ) future ( 1 ) gestureDetector ( 1 ) gestureRecognizer ( 1 ) gesturearena ( 1 ) get-command ( 1 ) get_cli ( 1 ) getbuilder ( 1 ) getx단점 ( 1 ) gitignore ( 1 ) glut ( 1 ) google fonts ( 1 ) gopath ( 1 ) goto ( 1 ) gradient ( 1 ) graphics ( 1 ) gvim ( 1 ) hackaton ( 1 ) hash ( 1 ) hashmap ( 1 ) hot reload ( 1 ) how to ( 1 ) html ( 1 ) i18n ( 1 ) icon ( 1 ) id ( 1 ) impeller ( 1 ) implementation ( 1 ) import ( 1 ) indicator ( 1 ) inkwell ( 1 ) interrupt ( 1 ) intl ( 1 ) introduction ( 1 ) io ( 1 ) isar ( 1 ) iterable ( 1 ) iteration ( 1 ) javascript ( 1 ) julia ( 1 ) juno ( 1 ) jupyter ( 1 ) kakaomap ( 1 ) keytool ( 1 ) korean ( 1 ) kotlin syntax ( 1 ) l10n ( 1 ) lambda ( 1 ) language ( 1 ) layer ( 1 ) layout ( 1 ) lineageOS ( 1 ) localkey ( 1 ) localtoglobal ( 1 ) long list ( 1 ) ls ( 1 ) mac osx ( 1 ) markdown ( 1 ) markup ( 1 ) material ( 1 ) method ( 1 ) microtask ( 1 ) migrate ( 1 ) mintlify ( 1 ) mock ( 1 ) module ( 1 ) monitor ( 1 ) moor ( 1 ) mouse ( 1 ) mouseregion ( 1 ) multiplatform ( 1 ) multiset ( 1 ) multithread ( 1 ) mutable ( 1 ) mvvm ( 1 ) new ( 1 ) node ( 1 ) nodejs ( 1 ) nosuchmethod ( 1 ) null-safety ( 1 ) numberformat ( 1 ) nvim ( 1 ) object ( 1 ) objectbox ( 1 ) objectkey ( 1 ) obx ( 1 ) online ide ( 1 ) operator ( 1 ) orientation ( 1 ) parabeac ( 1 ) parse ( 1 ) paste ( 1 ) path ( 1 ) pattern ( 1 ) pitfall ( 1 ) play store ( 1 ) pod ( 1 ) podfile ( 1 ) pointer ( 1 ) pointers ( 1 ) powershell ( 1 ) private ( 1 ) programming ( 1 ) pull to refresh ( 1 ) puzzle ( 1 ) pycharm ( 1 ) realitykit ( 1 ) recursion ( 1 ) reduce ( 1 ) reference ( 1 ) regex ( 1 ) regular expression ( 1 ) release note ( 1 ) renderbox ( 1 ) renderobject ( 1 ) repl ( 1 ) repository ( 1 ) response ( 1 ) rm ( 1 ) rotue ( 1 ) round ( 1 ) run ( 1 ) scope ( 1 ) scroll ( 1 ) search ( 1 ) server ( 1 ) serverless ( 1 ) service ( 1 ) sharp ( 1 ) singlerepo ( 1 ) singleton ( 1 ) sketch ( 1 ) sliver ( 1 ) sliverlist ( 1 ) snippets ( 1 ) sogae ( 1 ) sorting ( 1 ) source ( 1 ) sparse ( 1 ) sparse array ( 1 ) spec ( 1 ) split ( 1 ) sqflite ( 1 ) sqlite ( 1 ) sqrt decomposition ( 1 ) stateful ( 1 ) statefulwidget ( 1 ) step ( 1 ) stepper ( 1 ) string ( 1 ) stringbuffer ( 1 ) stringbuilder ( 1 ) studio ( 1 ) study ( 1 ) sub-directory ( 1 ) svn ( 1 ) swiftui ( 1 ) swipe to refresh ( 1 ) system_alert_window ( 1 ) system_cache ( 1 ) systemnavigator ( 1 ) tail recursion ( 1 ) tailrec ( 1 ) tap test ( 1 ) text ( 1 ) texteditingcontroller ( 1 ) textfield ( 1 ) texttheme ( 1 ) themedata ( 1 ) then ( 1 ) thread ( 1 ) throttle ( 1 ) time ( 1 ) tool ( 1 ) tools ( 1 ) tooltip ( 1 ) ts ( 1 ) tutorial ( 1 ) typescript ( 1 ) ui ( 1 ) unittest ( 1 ) update ( 1 ) usb ( 1 ) utf8 ( 1 ) ux ( 1 ) valuekey ( 1 ) variable ( 1 ) vector ( 1 ) versioncode ( 1 ) very_good ( 1 ) view ( 1 ) vim plugin ( 1 ) vimrc ( 1 ) virtualenv ( 1 ) wasm ( 1 ) web app ( 1 ) webview_flutter ( 1 ) while ( 1 ) widget tree ( 1 ) window ( 1 ) wsl ( 1 ) yield ( 1 ) 강의 ( 1 ) 개발 ( 1 ) 개발 공부 ( 1 ) 공부법 ( 1 ) 그래픽스 ( 1 ) 꼬리재귀 ( 1 ) 꿀팁 ( 1 ) 데노 ( 1 ) 두줄 ( 1 ) 디노 ( 1 ) 번역 ( 1 ) 블록 ( 1 ) 상태관리 ( 1 ) 실험 ( 1 ) 안드로이드 ( 1 ) 안드로이드프로젝트 ( 1 ) 안드로이드프로젝트복사 ( 1 ) 어이없는 ( 1 ) 조건부 임포트 ( 1 ) 주절주절분노조절실패의식으흐름 ( 1 ) 패키지 ( 1 ) 프로젝트복사 ( 1 ) 플러그인 ( 1 )