본문 바로가기
안드로이드

[Android] android boot app on startup

by 코딩히어로 2022. 11. 14.
728x90

1


안드로이드 OS를 사용하는 많은 IOT 분야에서는 전원을 켰을 때 자동적으로 App이 실행되는

기능을 많이 사용하는데 기존에 사용하던 방식으로는 더 이상 해당 기능이 실행되지 않습니다

Android10 이상으로 OS가 업데이트 되면서 정책이 변경되었기 때문인데 background에서는

App activity start 호출이 전혀 이루어지지 않습니다

 

제 경우에도 키오스크를 개발하면서 장치의 전원이 On이 될 때 키오스크 App이 자동으로 켜지도록

해달라는 업주의 요청을 받았는데 기존 방식은 전혀 동작하지 않았습니다

제가 사용했던 장치의 안드로이드 OS는 10버젼이였습니다.

처음 시도했던 방식은 이미 많은 개발자들에게 알려진 방식으로 다음과 같습니다

 


AndroidManifest.xml

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<receiver
    android:name=".AutoRunApp"
    android:enabled="true"
    android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

먼저 Manifest에 부팅이 완료되었을 때 AutoRunApp Receiver를 호출할 수 있도록 리시버를 등록합니다

안드로이드 시스템은 부팅이 완료되었을 때 브로드 캐스트를 통해 BOOT_COMPLETED를 보냅니다

 

AutoRunApp.class

public class AutoRunApp extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){
            Intent intent = new Intent(context, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    } 
}

Manifest에 정의한 AutoRunApp 클래스를 만들어줍니다

BOOT_COMPLETED시에 startActivity를 통해서 MainActivity를 호출합니다


위 방법을 통해 안드로이드 OS 10 미만의 환경에서는 실행이 잘 되지만

문제는 10 이상의 환경에서는 위 AutoRunApp이 호출까지는 되지만 startActivity가 전혀 동작하지 않습니다

하지만 Android10 이상에서도 실행하는 방법이 있습니다

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (!Settings.canDrawOverlays(this)) {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, 0);
    }
}

바로 위 코드를 통해 다른 어플 위에 표시라는 퍼미션을 얻는 것인데요

해당 퍼미션을 수락하게 되면 시스템이 부팅된 다음 기존에 사용되단 startActivity가 호출되게 됩니다

728x90
반응형

댓글