외로운 Nova의 작업실
안드로이드 앱 프로그래밍 - 26(시스템 상태 파악하기) 본문
- 화면 켬/끔
브로드캐스트 리시버로 유저가 화면을 켰는지 껏는지를 알 수 있습니다. 아래는 화면을 켰는지 껏는지에 따라 실행하는것이 다른 리시버를 만든 코드입니다. 먼저 메인 액티비티.kt 파일입니다.
class MainActivity : AppCompatActivity() {
lateinit var receiver: BroadcastReceiver
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
var Binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(Binding.root)
//리시버 생성
receiver = object: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
when (intent?.action) {
Intent.ACTION_SCREEN_ON -> Binding.screenOn.text = "Screen On!!"
Intent.ACTION_SCREEN_OFF -> Binding.screenOff.text = "Screen Off!!"
}
}
}
//리시버 등록
val filter = IntentFilter(Intent.ACTION_SCREEN_ON).apply {
addAction(Intent.ACTION_SCREEN_OFF)
}
registerReceiver(receiver, filter)
}
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(receiver)
}
}
다음은 메인 xml 파일입니다.
<?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:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/screenOn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="316dp"
android:text="Hello"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/screenOff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="World"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/screenOn"
app:layout_constraintVertical_bias="0.084" />
</androidx.constraintlayout.widget.ConstraintLayout>
화면을 키면 hello 문자열이 Screen on!!으로 바뀌고 화면을 끄면 world 문자열이 Screen off!! 로 바뀔것입니다.
- 실행
- 부팅
안드로이드 기기를 켜지는 것을 브로드캐스트 리시버로 받으려면 동적 등록이 아닌 매니페스트 파일에 등록해줘야하며 권한도 설정해줘야합니다. 아래는 매니페스트 파일입니다.
<receiver
android:name=".Myreciver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"
</intent-filter>
</receiver>
또한 퍼미션을 추가해야합니다.
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
'Programming > Kotlin - Android' 카테고리의 다른 글
안드로이드 앱 프로그래밍 - 28(바인딩 서비스) (0) | 2023.02.20 |
---|---|
안드로이드 앱 프로그래밍 - 27(서비스 이해하기) (0) | 2023.02.16 |
안드로이드 앱 프로그래밍 - 25(브로드캐스트 리시버 이해하기) (0) | 2023.02.14 |
안드로이드 앱 프로그래밍 - 24(액티비티 ANR 문제와 코루틴) (0) | 2023.02.13 |
안드로이드 앱 프로그래밍 - 23(태스크 관리) (0) | 2023.02.10 |
Comments