마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드13 부팅 시 자동 앱실행 관련 질문입니다 !! ㅠㅠ Auto start app on boot

0 추천

키오스크 서비스를 안드로이드13 버전에서 개발해야 하는 상황입니다.

이전 버전에서는 정상작동을 확인했으나, 안드로이드13 버전으로 버전이 올라가면서 제대로 동작하지 않는 듯 합니다.

참고로 잘 동작했던 이전버전은 28이며, 현재 타겟버전은 33입니다!

이거 하나 때문에 며칠 째 고생중이네요..
원래 안드로이드 개발자가 아닌데 어쩌다보니 키오스크 관련 업무를 맡게 돼서 관련 지식이 얕은 편입니다..

혹시 기존 코드를 올려드릴테니 관련 해결법에 대해 실마리라도 제공해 주실 분 계신가요 ㅠㅠ

설정에서 확인해보니 BatterySaver관련 문제도 아닌 것 같습니다..

 

xml 일부 입니다.

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<receiver
        android:name=".utils.BootReceiver"
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</receiver>

 

 

 

BootReceiver 코드입니다. 

class BootReceiver : BroadcastReceiver() {
    companion object {
        private const val TAG = "BootReceiver"
    }

    override fun onReceive(context: Context, intent: Intent) {
        Log.d(TAG, "onReceive() called with: context = $context, intent = $intent")

        if (intent.action == "android.intent.action.BOOT_COMPLETED") {
            val i = Intent(context, MainActivity::class.java)
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                val pendingIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    PendingIntent.getActivity(
                        context,
                        0,
                        i,
                        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
                    )
                } else {
                    PendingIntent.getActivity(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT)
                }
                try {
                    pendingIntent.send()
                } catch (e: PendingIntent.CanceledException) {
                    e.printStackTrace()
                }
            } else {
                context.startActivity(i)
            }
        }
    }
}
inlee (120 포인트) 님이 2023년 10월 18일 질문
inlee님이 2023년 10월 18일 수정

1개의 답변

0 추천

Android 13 변경사항에는 관련 내용은 없네요. 브레이크 포인트를 찍어서 해당 BroadCastReceiver가 제대로 동작하는지 먼저 체크해 보세요. 그리고 눈에 띄는 거 한가지는 (관련이 있는지 없는지는 모르겠지만요)

코드 기능이 안돼서 그냥 적습니다.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

     // 여기는 SDK 33, 34 + 만 실행 됨.
     val pendingIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {  

     }

} else {
     // SDK 23 - 32는 여기를 타게됨.
}

이렇게 되면 23 부터 32 버전 까지는 두번째 if 안의 로이 실행되지 않게 됩니다.
아래처럼 if else 블록 모두 액티비티를 실행하셔야


 

spark (227,530 포인트) 님이 2023년 10월 18일 답변
...