Android
오버레이 만들기 (항상 맨 위) Windows
수색…
팝업 오버레이
모든 응용 프로그램의 상단에보기를 배치하려면 해당 창 관리자에보기를 지정해야합니다. 이를 위해 시스템 경고 권한이 필요합니다.이 경고는 매니페스트 파일에 다음 행을 추가하여 요청할 수 있습니다.
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
참고 : 응용 프로그램이 손상되면보기가 창 관리자에서 제거됩니다. 따라서보기를 작성한 후 전경 서비스로 창 관리자에 할당하는 것이 좋습니다.
WindowManager에 뷰 할당하기
다음과 같이 창 관리자 인스턴스를 검색 할 수 있습니다.
WindowManager mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
뷰의 위치를 정의하려면 다음과 같이 몇 가지 레이아웃 매개 변수를 만들어야합니다.
WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
PixelFormat.TRANSLUCENT);
mLayoutParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL;
이제 다음과 같이 생성 된 레이아웃 매개 변수와 함께 뷰를 윈도우 관리자 인스턴스에 할당 할 수 있습니다.
mWindowManager.addView(yourView, mLayoutParams);
빌라! 보기가 다른 모든 응용 프로그램 위에 성공적으로 배치되었습니다.
참고 : 보기는 키 가드 위에 놓이지 않습니다.
부여 SYSTEM_ALERT_WINDOW 안드로이드 6.0 이상에 대한 권한
android 6.0에서이 권한은 동적으로 부여해야합니다.
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
권한 아래 던진 경우 6.0에서 오류가 거부되었습니다.
Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@86fb55b -- permission denied for this window type
해결책 :-
아래와 같이 오버레이 권한을 요청하면,
if(!Settings.canDrawOverlays(this)){
// ask for setting
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_OVERLAY_PERMISSION);
}
결과를 확인하고,
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_OVERLAY_PERMISSION) {
if (Settings.canDrawOverlays(this)) {
// permission granted...
}else{
// permission not granted...
}
}
}
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow