Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: Unable to add window. Permission denied for this window type

I'm working on an app where I need to display a window with some info ON the Lock Screen (KeyGuard) without unlocking the phone. I figured I could probably do it with WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG

But every time my app crashes with the following error:

android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@40ec8528 -- permission denied for this window type

These posts (here, here and here) all give the same answer. To add the following permission in the Manifest file.

android.permission.SYSTEM_ALERT_WINDOW

Solution that I have implemented but I am still getting the same error. Any idea of what I'm doing wrong?

Here are the permissions in my manifest file:

<?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" /> 

And this is the code I use to add the Window to the lock screen

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); 

Anybody got any idea?

P.S. I'm testing on an HTC Desire 620 DS running Android 4.4.2

like image 892
DroidPilot Avatar asked Aug 26 '15 10:08

DroidPilot


Video Answer


1 Answers

if you use apiLevel >= 19, don't use

WindowManager.LayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT  

which gets the following error:

android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@40ec8528 -- permission denied for this window type

Use this instead:

LayoutParams.TYPE_TOAST or TYPE_APPLICATION_PANEL 
like image 128
recotone2000 Avatar answered Sep 27 '22 17:09

recotone2000