Foggy day
[Android] Boot App(부트앱) 만들기 본문
이번 포스팅에서는 부트앱을 만들어보겠습니다. 부트앱은 디바이스의 전원이 켜졌을 때 실행되는 앱을 말합니다.
1. BootApp Reciever 만들기
2. Manifest 설정
3. 권한 요청
1. BootApp Reciever 만들기
Boot App을 만들기 위해서는 BroadcastReceiver를 추가해야 합니다.
디바이스의 전원이 켜지면 onReceive 함수에 진입하게 되고, Intent를 사용해서 원하는 Activity를 실행시킵니다. 그런데 Android OS 10 이상부터는 SYSTEM_ALERT_WINDOW 권한이 필요합니다. BootApp Receiver에서는 Settings.canDrawOverlays 함수를 사용해서 권한이 허용됐는지 아닌지만 체크합니다. 비허용이라면 return 함수를 호출해서 아무것도 하지 않습니다. 권한 요청은 MainActivity에서 진행할 예정입니다. Overlays 권한 체크 함수가 API level 23 이상부터 사용 가능하기 때문에 API 레벨 체크 로직 또한 추가했습니다.
- BootApp
class BootApp : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (intent != null && context != null && intent.action == Intent.ACTION_BOOT_COMPLETED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(context)) {
return
}
val i = Intent(context, MainActivity::class.java)
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(i)
}
}
}
2. Manifest 설정
Manifest에서는 필요한 권한과 앞서 만든 receiver를 추가하겠습니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!--부트앱을 위한 퍼미션-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--시스템 오버레이 설정(다른 앱 위에 표시) Android OS 10 이상부터 부트앱을 위해서 필요함-->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Boot_app_android"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<!--부트앱을 위한 receiver 추가-->
<receiver
android:name=".BootApp"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
</manifest>
3. 권한 요청
MainActivity에서 SYSTEM_ALERT_WINDOW 권한을 요청하겠습니다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
val uri: Uri = Uri.parse("package:$packageName")
val i = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, uri)
startActivity(i)
}
}
}
}
앞선 조건들이 충족된다면 디바이스의 전원이 켜졌을 때 잠시 후 앱이 실행되는 것을 볼 수 있습니다.
소스코드
'Android' 카테고리의 다른 글
[Android] SYSTEM_ALERT_WINDOW 권한 획득 (0) | 2023.09.26 |
---|---|
[Android] Android read file (0) | 2023.08.30 |
[Android] Android launcher basic (0) | 2023.08.27 |
[Android] Debug 모드로 앱 설치시 아이콘 사라지는 현상 (0) | 2021.09.13 |
[Android] google play console 내부 앱 공유 (0) | 2021.08.25 |