티스토리 뷰

반응형

Andoird O 로 업데이트 되면서 백그라운드 제한 , 경고창 띄우기 등 다양한 부분의 변화가 있습니다. Android O 대응 다른 앱 및 시스템 창에 모달창(경고창) 띄우는 방법에 대해서 공유하겠습니다.


Android O 다른 앱 및 시스템 창 위에 모달창 표시 제한

Google Developer 사이트에서는 Android O 부터 경고창을 표시 제한을 명시하고 있습니다.


경고창 제한


SYSTEM_ALERT_WINDOW 권한을 사용하는 앱은 다른 앱 및 시스템 창 위에 경고 창을 표시하기 위해 더 이상 다음과 같은 창 유형을 사용할 수 없습니다.

  • TYPE_PHONE

  • TYPE_PRIORITY_PHONE

  • TYPE_SYSTEM_ALERT

  • TYPE_SYSTEM_OVERLAY

  • TYPE_SYSTEM_ERROR

    대신에 앱은 TYPE_APPLICATION_OVERLAY라는 새로운 창 유형을 사용해야 합니다.

    TYPE_APPLICATION_OVERLAY 창 유형을 사용하여 앱에 대한 경고 창을 표시할 때 새로운 창 유형의 다음 특징을 염두에 두시기 바랍니다.

  • 앱의 경고 창은 항상 주요 시스템 창(예: 상태 표시줄 및 IME) 아래에 나타납니다.

  • 시스템에서 화면 표시를 개선하기 위해 TYPE_APPLICATION_OVERLAY 창 유형을 사용하는 창을 이동하거나 크기를 조정할 수 있습니다.

  • 알림 창을 열면, TYPE_APPLICATION_OVERLAY 창 유형을 사용해 나타나는 경고 창을 앱이 표시하지 못하도록 차단하는 설정을 사용자가 액세스할 수 있습니다.

var params: WindowManager.LayoutParams
// Android O 기준으로 창 유형을 변경합니다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
   flag = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
} else {
   flag = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR
}

params = WindowManager.LayoutParams(
   width,
   WindowManager.LayoutParams.WRAP_CONTENT,
   flag,
   WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
   or WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
   or WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
   or WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
   or WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON,
   PixelFormat.TRANSLUCENT)

TYPE_SYSTEM_ERROR

added in API level 1

public static final int TYPE_SYSTEM_ERROR

This constant was deprecated in API level 26.for non-system apps. Use TYPE_APPLICATION_OVERLAY instead.

Window type: internal system error windows, appear on top of everything they can. In multiuser systems shows only on the owning user's window.

Android O(API 26) 이전 버전에서는 TYPE_SYSTEM_ERROR 을 사용하였으나 API 26 이후부터는 지원을 안합니다.

<br/>

TYPE_APPLICATION_OVERLAY

added in API level 26

public static final int TYPE_APPLICATION_OVERLAY

Window type: Application overlay windows are displayed above all activity windows (types between FIRST_APPLICATION_WINDOW and LAST_APPLICATION_WINDOW) but below critical system windows like the status bar or IME.

The system may change the position, size, or visibility of these windows at anytime to reduce visual clutter to the user and also manage resources.

Requires Manifest.permission.SYSTEM_ALERT_WINDOW permission.

The system will adjust the importance of processes with this window type to reduce the chance of the low-memory-killer killing them.

In multi-user systems shows only on the owning user's screen.

Android O(API 26) 이전 버전부터는 TYPE_APPLICATION_OVERLAY 지원하며 사용 시Manifest.permission.SYSTEM_ALERT_WINDOW 설정을 해야 합니다.

참고

https://developer.android.com/about/versions/oreo/android-8.0-changes?hl=ko

반응형
댓글