[Android] 다른 앱 위에 그리기 권한: TYPE_APPLICATION_OVERLAY
[다른 앱 위의 그리기]는 폰 설정 > 애플리케이션 > 앱 > 고급 [다른 앱 위에 표시되는 앱]에서 권한 설정할 수 있다.
퍼미션
[다른 앱 위에 그리기] 설정을 추가하려면 Manifest에 이를 사용하겠다고 퍼미션을 추가해야하는데,
1 | <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> |
권한: 다른 앱 위에 그리기(Draw over other apps / Appear on top)
위 퍼미션을 추가하면 앱 설정(설정>애플리케이션>해당 앱)에 [다른 앱 위에 그리기] 정보가 뜬다. (안드로이드 버전마다 언어:영어일 때의 표시나 노출 위치는 다를 수 있다.)
중요한 것은 [다른 앱 위에 그리기]의 기본값이 버전마다 다르다는 건데,
- API level 23(Android 6.0 Marshmallow) 미만에서는 true
- 그 이상에서는 false
앱스토어에서 설치할 경우 기본적으로 위와 같이 설정되어 유저의 단말에 설치됨을 숙지하여 기능구현 프로세스를 짜야한다.
버전 체크 방법
[다른 앱 위에 그리기] 기능이 필요할 경우 API level 23 이상에서는 버전 체크 처리를 해주어야한다.
1 | /* REQ_CODE_OVERLAY_PERMISSION는 임의로 정한 상수 |
덧붙여 [다른 앱 위에 그리기] 설정값이 true인지 확인하는 방법은 다음과 같다.
1 | public static boolean alertPermissionCheck(Context context) { |
주의: deprecated 된 WindowManager.LayoutParams의 플래그
- TYPE_PHONE
- TYPE_PRIORITY_PHONE
- TYPE_SYSTEM_ALERT
- TYPE_SYSTEM_ERROR
- TYPE_SYSTEM_OVERLAY
- TYPE_TOAST
위에 나열된 타입은 API level 26(Android 8.0 Oreo)에 deprecated 되어 아래와 같이 Android Developer 에서는 이것들 대신 TYPE_APPLICATION_OVERLAY를 쓰도록 가이드 하고 있다.
1 | val param: WindowManager.LayoutParams |
[Android] 다른 앱 위에 그리기 권한: TYPE_APPLICATION_OVERLAY
https://dl137584.github.io/2022/02/09/013-type-application-overlay/