안드로이드 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가 호출되게 됩니다
'안드로이드' 카테고리의 다른 글
[Android] AndroidStudio 주석 단축키 안될때 (Ctrl+/) (0) | 2023.01.03 |
---|---|
[Android] GPS 위치정보 가져오기 (0) | 2023.01.03 |
[Android] ConcurrentModificationException 에러 해결 (3) | 2022.10.28 |
[Android] Only the original thread that created a view hierarchy can touch its views 에러 해결 (2) | 2022.10.27 |
[Android] 자바에서 Unsigned 타입 적용하기 (3) | 2022.10.13 |
댓글