Tôi đang làm việc trên một ứng dụng mà tôi cần hiển thị một cửa sổ với một số thông tin TRÊN Màn hình khóa (KeyGuard) mà không cần mở khóa điện thoại. Tôi nghĩ rằng tôi có thể làm điều đó với WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG
Nhưng mỗi khi ứng dụng của tôi gặp sự cố với lỗi sau:
android.view.WindowManager $ BadTokenException: Không thể thêm cửa sổ android.view.ViewRootImpl$W@40ec8528 - quyền bị từ chối đối với loại cửa sổ này
Các bài viết này ( đây , đây và đây ) đều đưa ra câu trả lời giống nhau. Để thêm quyền sau vào tệp kê khai.
android.permission.SYSTEM_ALERT_WINDOW
Giải pháp mà tôi đã thực hiện nhưng tôi vẫn gặp lỗi tương tự. Bất kỳ ý tưởng về những gì tôi đang làm sai?
Đây là các quyền trong tệp kê khai của tôi:
<?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" />
Và đây là mã tôi sử dụng để thêm Cửa sổ vào màn hình khóa
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);
Có ai có ý kiến gì không?
PS Tôi đang thử nghiệm trên HTC Desire 620 DS chạy Android 4.4.2