특정 상황에서 App 이 background 또는 foreground 로 전환시키고 싶을 때 어떻게 구현 해야 되는지 간단한 예제를 통해 정리하려고 합니다. 또한, foreground 동작에 어떤 제한이 생겼는지와  이를 해결하기 위한 SYSTEM_A...

[안드로이드] background to foreground 예제 (+SYSTEM_ALERT_WINDOW)


특정 상황에서 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: