외로운 Nova의 작업실

안드로이드 앱 프로그래밍 - 26(시스템 상태 파악하기) 본문

Programming/Kotlin - Android

안드로이드 앱 프로그래밍 - 26(시스템 상태 파악하기)

Nova_ 2023. 2. 15. 12:11

- 화면 켬/끔

브로드캐스트 리시버로 유저가 화면을 켰는지 껏는지를 알 수 있습니다. 아래는 화면을 켰는지 껏는지에 따라 실행하는것이 다른 리시버를 만든 코드입니다. 먼저 메인 액티비티.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"/>

 

Comments