프로그래밍/android
안드로이드 오버레이 권한 설정창 이동
ylblog
2016. 12. 28. 14:34
안드로이드 6.0 마시멜로우 버전 부터 권한 설정을 사용자가 개별로 설정할 수 있게 변경이 되었습니다.
6.0에 대응하는 스마트폰에서 발생하는 오버레이 문제도 이 권한 설정 때문에 연관이 있으므로
오버레이 설정을 사용자에게 권하는 소스가 필요하여 사용하게 되었습니다.
(기본적으로 앱 설치 시 그 앱에 해당하는 오버레이 설정이 ON으로 되어 있지만 자동으로 OFF 상태나 오버레이 ON으로 다른 앱 설치에 문제가 있다면
사용자가 ON, OFF를 할 수 있는 상황이 되어야 하기에 개선했습니다.
2017-02-09 수정 - 기본적으로 앱 설치 시 오버레이 설정이 ON 되어있는 스마트폰이 별로 없는 것으로 확인 되어 무조건 Permission 설정하여
오버레이 문제를 해결하는 코드를 넣어놓아야 안드로이드 마시멜로우 버전에 대응할 수 있습니다. )
* Permission 설정합니다.
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> |
* 오버레이 권한 설정창으로 이동합니다.
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE= 5469; |
public void Permission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M // M 버전(안드로이드 6.0 마시멜로우 버전) 보다 같거나 큰 API에서만 설정창 이동 가능합니다., && !Settings.canDrawOverlays(this)) { //지금 창이 오버레이 설정창이 아니라면 조건 입니다.
PermissionOverlay();
} else { System.out.println("버전이 낮거나 오버레이설정창이 아니라면"); }
}
@TargetApi(Build.VERSION_CODES.M) //M 버전 이상 API를 타겟으로, public void PermissionOverlay() { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE); }
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) { if (Settings.canDrawOverlays(this)) { // You have permission
// 오버레이 설정창 이동 후 이벤트 처리합니다. } } }
|
* Permission() 호출하여 오버레이 권한 설정창으로 이동합니다
[이미 설정 되어 있으면 다시 설정창으로 이동하지 않습니다!]
-캡처 화면은 따로 첨부하지 않겠습니다.-