나는 약간의 정보가있는 창을 표시해야하는 응용 프로그램에서 일하고 있어요 ON 전화를 잠금 해제하지 않고 잠금 화면 (키 가드). 아마도 WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG로 할 수 있다고 생각했습니다.
하지만 내 앱이 다음 오류와 함께 충돌 할 때마다 :
android.view.WindowManager $ BadTokenException : 창을 추가 할 수 없음 android.view.ViewRootImpl$W@40ec8528-이 창 유형에 대한 권한이 거부되었습니다.
이 게시물 ( here , here 및 here )은 모두 동일한 답변을 제공합니다. Manifest 파일에 다음 권한을 추가하려면.
android.permission.SYSTEM_ALERT_WINDOW
구현 한 솔루션이지만 여전히 동일한 오류가 발생합니다. 내가 뭘 잘못하고 있는지 알아?
내 매니페스트 파일의 권한은 다음과 같습니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.droidpilot.keyguardwindow" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
그리고 이것은 잠금 화면에 Window를 추가하는 데 사용하는 코드입니다.
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutInflater mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = mInflater.inflate(R.layout.lock_screen_notif, null);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG,
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
PixelFormat.TRANSLUCENT
);
wm.addView(mView, params);
아는 사람있어?
PS Android 4.4.2를 실행하는 HTC Desire 620 DS에서 테스트 중입니다.