๐ก์๋๋ก์ด๋ 4๋ ์ปดํฌ๋ํธ ์ค์ ํ๋์ธ BroadcastReceiver์ ๋ํ์ฌ ์ ๋ฆฌํ์์ต๋๋ค.
๊ฐ์
- ์ด์ ์ Broadcast Receiver์ BootReceiver์ ๋ํ์ฌ ํ์ตํ๊ณ ๊ทธ์ ๋ํ ๊ธฐ๋ก์ ๋จ๊ฒผ์ต๋๋ค.
Broadcast Receiver, BootReciver ํ์ฉํ๊ธฐ
- BroadcastReceiver์ ๋ํ์ฌ ์ข ๋ ์์ธํ๊ฒ ํ์ตํ๊ณ ์ ๊ธฐ๋กํ๊ฒ ๋์์ต๋๋ค.
BroadcastReceiver
- BroadcastReceiver๋ ์๋๋ก์ด๋์์ ์์คํ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์์ํค๋ BroadcastReceiver Message๋ฅผ ์์ ํ๋ ์ปดํฌ๋ํธ์ ๋๋ค.
- ์์คํ ์ด๋ ๋ค๋ฅธ ์ฑ์ด ๋ณด๋ธ ์ด๋ฒคํธ๋ฅผ ์ฑ์์ ์์ ํ๊ณ , ์ด์ ๋์ํ๋ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
ํน์ง
- ์์คํ
๋ธ๋ก๋์บ์คํธ ์์
- ๋ฐฐํฐ๋ฆฌ ๋ถ์กฑ, ๋คํธ์ํฌ ์ํ ๋ณ๊ฒฝ, SMS ์์ , ๋ถํ ์๋ฃ์ ๊ฐ์ ์๋๋ก์ด๋ ์์คํ ์์ ๋ฐ์ํ๋ ๋ค์ํ ์ด๋ฒคํธ๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์
๋ธ๋ก๋์บ์คํธ
- ์ฑ ๋ด๋ถ์์ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ก ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ฑฐ๋, ๋ค๋ฅธ ์ฑ์ด ๋ฐ์์ํจ ๋ธ๋ก๋์บ์คํธ๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
- ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ
- BroadcastReceiver๋ UI๊ฐ ์๋ ์ปดํฌ๋ํธ๋ก, ์งง์ ์๊ฐ ๋์ ์์ ์ ์ํํ๊ณ ์ข ๋ฃํฉ๋๋ค.
- ๊ธด ์์ ์ ์ํํ ๊ฒฝ์ฐ ์๋น์ค์ ํจ๊ป ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
๋ธ๋ก๋์บ์คํธ ๊ฐ์ | Background work | Android Developers
์๋ช ์ฃผ๊ธฐ
- BroadcastReceiver๋ UI๊ฐ ์๋ ์ปดํฌ๋ํธ๋ก, ์์ ํ ๋ธ๋ก๋์บ์คํธ์ ๋ํด ๋น ๋ฅด๊ฒ ์๋ตํ๊ณ ์ข ๋ฃํฉ๋๋ค.
- onReceive() ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด ์ฑ์ด ์์ง ์คํ ์ค์ด์ง ์์ ๊ฒฝ์ฐ์๋ ์์คํ ์์ ์ฑ์ ์ ์ ๊นจ์์ ๋ฉ์์ง๋ฅผ ์์ ํ๋๋ก ํฉ๋๋ค.
- onReceive()์์ ๊ธด ์์ ์ ์ํํ๋ฉด ์์คํ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ๊ธด ์์ ์ด ํ์ํ ๊ฒฝ์ฐ์๋ ์๋น์ค๋ก ์์ ์ ๋๊ธฐ๋ ๊ฒ์ด ์ข์ต๋๋ค.
BroadcastReceiver ๋ฑ๋กํ๊ธฐ
์ ์ ๋ฑ๋ก
- ๋ธ๋ก๋์บ์คํธ ๋ฆฌ์๋ฒ๋ฅผ ํ์ฉํ ๋ Manifest์ ๋ฑ๋กํ๋ ์ ์ ๋ฑ๋ก ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- ์์คํ ์ ๋ถํ ์๋ฃ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ BroadcastReceiver๋ฅผ ์ ์ํ๊ณ , AndroidManifest.xml์ ๋ฑ๋กํ์์ต๋๋ค.
// ์์คํ
๋ถํ
์๋ฃ ์ด๋ฒคํธ ์์
class MyBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
// ๋ถํ
์๋ฃ ํ ์ํํ ์์
Log.d("BroadcastReceiver", "Device booted!")
}
}
}
- receiver๋ฅผ ํ์ฉํด ๋ฑ๋กํ ์ ์์ต๋๋ค.
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application>
<receiver android:name=".MyBroadcastReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
๋์ ๋ฑ๋ก
- ์ฝ๋์์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ๋ฑ๋ก ๋ฐ ํด์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- Wi-Fi ์ํ ๋ณ๊ฒฝ ์ด๋ฒคํธ๋ฅผ ๋์ ์ผ๋ก ์์ ํ๋ฉฐ, ์ฑ์ด ์คํ ์ค์ผ ๋๋ง ๋ธ๋ก๋์บ์คํธ ๋ฆฌ์๋ฒ๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
class MainActivity : AppCompatActivity() {
private lateinit var receiver: BroadcastReceiver
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val action = intent.action
if (action == WifiManager.WIFI_STATE_CHANGED_ACTION) {
// Wi-Fi ์ํ๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ์ฒ๋ฆฌํ ์์
val wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN)
when (wifiState) {
WifiManager.WIFI_STATE_ENABLED -> Log.d("BroadcastReceiver", "Wi-Fi Enabled")
WifiManager.WIFI_STATE_DISABLED -> Log.d("BroadcastReceiver", "Wi-Fi Disabled")
}
}
}
}
// ๋์ ๋ฆฌ์๋ฒ ๋ฑ๋ก
val intentFilter = IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION)
registerReceiver(receiver, intentFilter)
}
override fun onDestroy() {
super.onDestroy()
// ๋์ ๋ฆฌ์๋ฒ ํด์
unregisterReceiver(receiver)
}
}
์ ๋ฆฌ
- BroadcastReceiver๋ ์๋๋ก์ด๋์์ ์์คํ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ๋น๋๊ธฐ ํต์ ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ก ํ์ฉ๋ฉ๋๋ค.
- ์ ์ ํน์ ๋์ ๋ฑ๋ก์ ํตํด ๋ค์ํ ์ด๋ฒคํธ๋ฅผ ์์ ํ๊ณ ์ฒ๋ฆฌํ ์ ์์ง๋ง, ๊ธด ์์ ์ ํผํ๊ณ ํ์์ ๋ฐ๋ผ Service์ ๊ฒฐํฉํ์ฌ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.