안드로이드 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() 호출하여 오버레이 권한 설정창으로 이동합니다


     [이미 설정 되어 있으면 다시 설정창으로 이동하지 않습니다!]


-캡처 화면은 따로 첨부하지 않겠습니다.-


+ Recent posts