मैं एक ऐसे ऐप पर काम कर रहा हूं, जहां मुझे फोन को अनलॉक किए बिना लॉक स्क्रीन (KeyGuard) पर कुछ जानकारी के साथ एक विंडो प्रदर्शित करने की आवश्यकता है। मुझे लगा कि मैं शायद WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG के साथ कर सकता हूँ
लेकिन हर बार मेरा ऐप निम्न त्रुटि के साथ क्रैश हो जाता है:
android.view.WindowManager $ BadTokenException: विंडो जोड़ने में असमर्थ android.view.ViewRootImpl WoW@40ec8528 - इस विंडो प्रकार के लिए अनुमति अस्वीकृत
ये पद ( यहां , यहां और यहां ) सभी एक ही उत्तर देते हैं। मेनिफेस्ट फ़ाइल में निम्नलिखित अनुमति जोड़ने के लिए।
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" />
और यह वह कोड है जिसका उपयोग मैं विंडो को लॉक स्क्रीन में जोड़ने के लिए करता हूं
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 पर परीक्षण कर रहा हूं