특정 상황에서 App 이 background 또는 foreground 로 전환시키고 싶을 때
어떻게 구현 해야 되는지 간단한 예제를 통해 정리하려고 합니다.
또한, foreground 동작에 어떤 제한이 생겼는지와
이를 해결하기 위한 SYSTEM_ALERT_WINDOW 권한에 대해 확인 할 수 있습니다.
1. Background / Foregound 동작
Background
private fun moveToBackground() {
moveTaskToBack(false)
}
Foreground
private fun moveToForeground() {
val intent = Intent(this, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP)
startActivity(intent)
}
2. Background 에서 Activity 시작에 대한 제한 사항
Android Q (API 29) 부터 Background 에서 Activity 시작에 대한 제한 사항이 생기면서
Foreground 동작에도 제한이 생겼습니다.
이를 해결하기 위해서는 SYSTEM_ALERT_WINDOW 권한을 부여 받아야 합니다.
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
private fun checkOverlayPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Settings.canDrawOverlays(this)) { // 권한 Check
} else {
moveToOverlayPermission()
}
}
}
@RequiresApi(Build.VERSION_CODES.M)
private fun moveToOverlayPermission() {
val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)
intent.data = Uri.parse("package:$packageName")
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
startActivity(intent)
}
3. 예제
Background / Foreground 동작,
그리고 SYSTEM_ALERT_WINDOW 권한에 따라 Foreground 동작을 확인할 수 있는 예제입니다.
버튼 구성은 아래와 같습니다.
- SYSTEM_ALERT_WINDOW 권한 이동 버튼
- Background 동작 버튼
- Background 동작 2초 후에 Foreground 동작 버튼
4. 예제 다운로드
참고자료
Background 에서 Activity 시작에 대한 제한 사항
0 comments: