14-2. 시스템 상태 파악하기

StrayCat·2022년 12월 9일
0

부팅 완료

  • 부팅이 완료되었을 때, 특정 작업을 수행하고 싶을 경우 설정
        <receiver android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            </intent-filter>
        </receiver>
  • 아래와 같이 부팅 완료 권한 설정
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>

화면 켬/끔

  • 화면 on off를 감지하는 리시버는 매니페스트에 등록하면 실행되지 않으므로, registerReceiver()를 통해 동적으로 등록해야 한다.
class MyReceiver : BroadcastReceiver(){
    override fun onReceive(p0: Context?, p1: Intent?) {
        when(p1?.action){
            Intent.ACTION_SCREEN_ON -> Log.d("lumine", "On")
            Intent.ACTION_SCREEN_OFF -> Log.d("lumine", "Off")
        }
    }
}
        val filter = IntentFilter(Intent.ACTION_SCREEN_ON).apply { 
            addAction(Intent.ACTION_SCREEN_OFF) // Action 추가
        }
        registerReceiver(receiver, filter)

배터리상태

  • 배터리 낮음 / 정상 / 충전상태 / 전원 공급 시작 여부 등의 상태마다 수행된다.
class MyReceiver : BroadcastReceiver(){
    override fun onReceive(p0: Context?, p1: Intent?) {
        when(p1?.action){
            Intent.ACTION_BATTERY_LOW -> Log.d("lumine", "LOW")
            Intent.ACTION_BATTERY_OKAY -> Log.d("lumine", "OKAY")
        }
    }
}
  • 만약 시스템이 배터리 관련 인텐트를 발생시키지 않아도 현재 배터리 상태가 필요할 경우 아래와 같이 등록할 수 있다.
        val intentFilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
        val batteryStatus = registerReceiver(null, intentFilter) // 리시버 null 등록
        val status = batteryStatus!!.getIntExtra(BatteryManager.EXTRA_STATUS, -1)
        if(status == BatteryManager.BATTERY_STATUS_CHARGING){
            val chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)
            when(chargePlug){
                BatteryManager.BATTERY_PLUGGED_USB -> Log.d("lumine", "USB")
                BatteryManager.BATTERY_PLUGGED_AC -> Log.d("lumine", "AC")
            }
        } else{
            Log.d("lumine", "not charging")
        }
  • 배터리 퍼센테이지 가져오기
        val level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
        val scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
        val batteryPct = level / scale.toFloat() * 100

0개의 댓글