안드로이드 개발 중 화면 오버레이 문제 해결
안드로이드 개발 중 API23(Marshmallow)-안드로이드6.0부터 화면 오버레이 권한 설정을 Manifest의 입력만으론 사용하지 못하게 막아 놓았다..
직접적으로 SYSTEM_ALERT_WINDOW 권한 사용을 하지 않도록 권고하도록 바뀜.
오버레이 설정 때문에 발생한 문제점
- 오버레이 뷰가 실행이 안됨
- Service로 뷰를 실행시키는 것에 대해서 실행자체가 안되어 버리니 해결방법 필요
1. 안드로이드6.0에 대응하도록 코드 변경
Manifest에 권한 설정
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Intent 연결 추가
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQ_CODE_OVERLAY_PERMISSION);
안드로이드 6.0에서 제공하는 API로 사용해야 Settings.ACTION_MANAGE_OVERLAY_PERMISSION 구문에 오류가 없음
REQ_CODE_OVERLAY_PERMISSION : 상수
2. 기존 안드로이드 버전을 쓰면서 계속 개발을 이어 나간다면,
앱을 사용하는 사용자에게 권한 설정을 권고, 공지
- LG계열 스마트폰
설정->일반->앱->앱 설정->해당 앱 다른앱 위에 그리기 허용
-삼성계열 스마트폰
설정-애플리케이션 관리자 - 더보기 - 다른 앱 위에 표시되는 앱 - 해당 앱 ON
- 중국 스마트 폰 허용 설정
* VIVO
i Manager를 실행 -> App manager 선택 -> Floating window management를 선택 -> 해당 앱 ON
* XIAOMI(샤오미폰)
일반적인 안드로이드 폰과 같음 . Display pop-up window Run-time Permission 허용
* HWAWEI (화웨이폰)
Phone Manage 앱 실행 -> Dropzone management를 ON으로 설정
* OPPO
Security App 실행 -> Privacy Permission 선택 -> Floating Window Management 선택 -> 앱 ON