728x90
BroadcastReceiver
- 안드로이드 시스템 상에서 발생하는 여러가지 브로드캐스트 메시지들을 수신하여 각 메시지에 맞게 처리할 수 있도록 하는 컴포넌트이다.
- 따로 생명주기가 존재하지 않는다.
- 추상 클래스이므로 상속받는 자식 클래스를 만들어서 onReceive 메서드를 오버라이드해야한다.
- 예를 들어, 스마트폰이 부팅될 때 송신한 브로드캐스트 메시지를 수신하여 자동으로 앱이 실행되도록 할 수도 있다.
예제
- BroadcastReceiver를 상속받는 클래스를 생성한다. (MyBroadcastReceiver)
- Manifest에 receiver를 등록한다.
- BroadcastReceiver를 사용할 액티비티 혹은 서비스에 MyBroadcastReceiver 객체를 만든다.
- 수신할 메시지 종료를 정해놓은 Intentfilter를 만든 후 receiver와 함께 register한다.
- 테스트를 위하여 버튼을 클릭하면 내가 임의로 정한 브로드캐스트 메시지를 송신하도록 한다.
package org.techtown.test
import android.content.Intent
import android.content.IntentFilter
import android.net.ConnectivityManager
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//버튼 클릭 시 MyNotification 메시지 broadcast함
broad_btn.setOnClickListener {
var intent = Intent()
intent.setAction("com.example.broadcast.MY_NOTIFICATION")
sendBroadcast(intent)
}
var br = MyBroadcastReceiver()
var filter = IntentFilter()
//수신할 action 종류 넣기
filter.addAction("com.example.broadcast.MY_NOTIFICATION")
//브로드캐스트리시버 등록
registerReceiver(br, filter)
}
}
package org.techtown.test
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.widget.Toast
class MyBroadcastReceiver : BroadcastReceiver() {
//메시지 수신 시 할 작업
override fun onReceive(context: Context, intent: Intent) {
Toast.makeText(context, intent.action, Toast.LENGTH_SHORT).show()
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.techtown.test">
<uses-permission android:name="android.permission.SEND_SMS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<receiver android:name=".MyBroadcastReceiver" android:exported="true">
</receiver>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:id="@+id/broad_btn"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:text="확인"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>
결과
버튼을 클릭했을 때 발생한 브로드캐스트 메시지를 수신하여 토스트를 띄운다.
728x90
'Android' 카테고리의 다른 글
[안드로이드] Bundle (0) | 2020.10.22 |
---|---|
[안드로이드] Service에서 Activity의 UI 업데이트하기 (0) | 2020.10.21 |
[안드로이드] Context (0) | 2020.10.21 |
[안드로이드] 안드로이드 앱 성능 개선 (feat. 네이버 테크 콘서트) (0) | 2020.10.19 |
[안드로이드] EditText 밑줄 색 바꾸기 (0) | 2020.10.12 |
댓글