Ich arbeite an einer App, in der ich ein Fenster mit einigen Informationen auf dem Sperrbildschirm (KeyGuard) anzeigen muss, ohne das Telefon zu entsperren. Ich dachte, ich könnte es wahrscheinlich mit WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG tun
Aber jedes Mal stürzt meine App mit folgendem Fehler ab:
android.view.WindowManager $ BadTokenException: Fenster android.view.ViewRootImpl$W@40ec8528 kann nicht hinzugefügt werden - Berechtigung für diesen Fenstertyp verweigert
Diese Beiträge ( hier , hier und hier ) geben alle die gleiche Antwort. So fügen Sie der Manifest-Datei die folgende Berechtigung hinzu
android.permission.SYSTEM_ALERT_WINDOW
Lösung, die ich implementiert habe, aber immer noch den gleichen Fehler erhalte. Irgendeine Idee, was ich falsch mache?
Hier sind die Berechtigungen in meiner Manifestdatei:
<?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" />
Und dies ist der Code, mit dem ich das Fenster zum Sperrbildschirm hinzufüge
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);
Hat jemand eine Idee?
PS Ich teste auf einem HTC Desire 620 DS mit Android 4.4.2