항상 최상단에 위치하는 뷰 구현 시 문제가 발생한다.
1. '다른 앱 위에 그리기' 권한을 허용해 준다.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
Log.i("TEST", "Permission Granted ? " + Settings.canDrawOverlays(context));
//M 이상에서만 퍼미션 확인(그 이하에서는 자동으로 허용됨)
//다른 앱 위에서 그리기 권한에 대한 허용 여부 체크
if(Settings.canDrawOverlays(context)) {
//이미 권한 설정 되어있음
context.startService(new Intent(context, XXSerivce.class));
}else{
//권한 없음
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + context.getPackageName()));
context.startActivity(intent); //startActivityForResult로 대체 가능
}
}
2. 서비스에서 addView를 할 때 버전에 따라 Flag를 다르게 설정
int LAYOUT_FLAG;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
}else{
LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_PHONE;
}
WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(
가로 크기,
세로 크기,
LAYOUT_FLAG,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
mWindowManager.addView(표시할 뷰, mParams);
** 참고
https://stackoverflow.com/questions/46208897/android-permission-denied-for-window-type-2038-using-type-application-overlay
'개발 > Android' 카테고리의 다른 글
FileProvider의 Path를 여러 개 등록하고 싶을 때 (0) | 2018.08.06 |
---|---|
productFlavors 추가하기 (같은 패키지 명, 중복 설치) (0) | 2018.08.06 |
RetroFit2 라이브러리 공부 - 단일 데이터 통신 (0) | 2018.07.09 |
Glide 정리 (0) | 2018.06.02 |
안드로이드 번역 API 연동 참고 (0) | 2018.05.31 |