我工作的一个应用程序,我需要显示一些信息的窗口ON未解锁手机的锁屏(键盘保护).我想我可以用WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG做到这一点
但每次我的应用程序崩溃时出现以下错误:
android.view.WindowManager $ BadTokenException:无法添加窗口android.view.ViewRootImpl$W@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" />
Run Code Online (Sandbox Code Playgroud)
这是我用来将Window添加到锁定屏幕的代码
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 …Run Code Online (Sandbox Code Playgroud) 我正在开发像whatsapp这样的聊天应用程序,我正在锁定屏幕上进行弹出通知.我开发了代码,但问题是 - 我在对话框上使用了两个按钮,如whatsapp作为关闭和视图,但按钮上的onclick监听器不起作用,因为对话框没有焦点,每当我点击任何地方的背景对话框点击屏幕执行点击.我需要这种类型的对话和功能,如 -

但对话没有得到关注或问题是别的,我不能明确地得到它请帮助.
为了实现这一点,我正在使用以下服务 -
public class PopupService extends Service{
@Override
public IBinder onBind(Intent intent) {
Utils.printLog("on bind");
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Utils.printLog("on start command");
PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
WakeLock mWakeLock = pm.newWakeLock((PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "YourServie");
mWakeLock.acquire();
mWakeLock.release();
///////////////////////////////////
final WindowManager mWindowManager = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
final View mView = inflater.inflate(R.layout.dialog_popup_notification_received, null);
Utils.printLog("view" + mView.isClickable());
mView.setClickable(true);
mView.setFocusable(true);
mView.setFocusableInTouchMode(true);
mView.setOnClickListener(new OnClickListener() {
@Override
public void …Run Code Online (Sandbox Code Playgroud)