Sto lavorando su un app in cui ho bisogno per visualizzare una finestra con alcune informazioni ON il blocco dello schermo (tastiera) senza sbloccare il telefono. Ho pensato che probabilmente avrei potuto farlo con WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG
Ma ogni volta che la mia app si arresta in modo anomalo con il seguente errore:
android.view.WindowManager $ BadTokenException: impossibile aggiungere la finestra android.view.ViewRootImpl$W@40ec8528 - autorizzazione negata per questo tipo di finestra
Questi post ( qui , qui e qui ) danno tutti la stessa risposta. Per aggiungere la seguente autorizzazione nel file Manifest.
android.permission.SYSTEM_ALERT_WINDOW
Soluzione che ho implementato ma ricevo ancora lo stesso errore. Qualche idea di cosa sto facendo di sbagliato?
Ecco le autorizzazioni nel mio file manifest:
<?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" />
E questo è il codice che uso per aggiungere la finestra alla schermata di blocco
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);
Qualcuno ha idea?
PS Sto provando su un HTC Desire 620 DS con Android 4.4.2