Yeh Marshmallow 이후 Android는 보안 수준을 더욱 강화합니다.
SYSTEM_ALERT_WINDOW
당신은 플로팅 액션과 모든 것을 보여줄 수 있습니다 당신은 당신의 onCreate()
메소드 에서 코드를 따라 사용자에게 권한을 부여 할 수 있습니다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(myIntent);
}
이 작업 ACTION_MANAGE_OVERLAY_PERMISSION
은 '다른 앱 위에 그리기'권한 화면을 직접 시작합니다.
편집 : 위 코드가 100 % 올바르게 작동합니다.
하지만 난 그냥 많은 사람들이 아직도 방법을 허용 할 수 있음을 찾고 발견 ACTION_MANAGE_OVERLAY_PERMISSION
사용자가 할 수있는 경우 허가가되면 다음마다 그는 오픈 응용 프로그램 요구하지 않는 것처럼 영구적 정도 당신이 -에 대한 듣고 솔루션
기기에 API 23 이상이 있는지 확인
23+ API이면 사용자가 허가를 받았는지 확인하십시오.
한 번 허가를 받았다 Settings.ACTION_MANAGE_OVERLAY_PERMISSION
면 그를 운전하지 않았고 아직 허가하지 않았다면 런타임 허가 확인을 요청하십시오.
귀하의 onCreate()
방법에 아래 줄을 넣으십시오 . 이 뒤에 넣어setContentView
checkPermission();
이제 코드 아래에 넣으십시오. onActivityResult
@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
if (!Settings.canDrawOverlays(this)) {
checkPermission();
} else {
}
}
}
이제 마지막으로 checkPermission 메소드 코드
public void checkPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
}
}
}
그리고 클래스에서이 공용 변수를 선언하는 것을 잊지 마십시오.
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 5469;