通过服务在Android上创建始终在线的警报

时间:2015-05-26 12:38:20

标签: android

我几周来一直试图找到解决这个问题的正确方法,但我仍然找不到任何东西。

基本上,我尝试做的是从正在运行的服务(监视某些事件)创建一个警告对话框。即使手机已锁定,警告对话框也应始终显示在其他所有内容之上。我正在寻找类似于有人给你打电话或闹钟响起的事情。

我发现的最佳解决方案如下:

WindowManager mWindowManager = (WindowManager)
    mContext.getSystemService(Context.WINDOW_SERVICE);
LayoutInflater layoutInflater = (LayoutInflater)     
mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = layoutInflater.inflate(R.layout.layout_alert, null);
mLayoutParams = new WindowManager.LayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT,
    ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0,
    WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
        | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
        | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
    PixelFormat.RGBA_8888);
mWindowManager.addView(mView, mLayoutParams);

在清单中:

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

问题是,如果我使用TYPE_SYSTEM_ALERT,那么对话框总是按我的意愿显示,但我无法在视图中的按钮上接收任何触摸事件。另一方面,如果我使用TYPE_PRIORITY_PHONE,那么我确实会收到所有触摸事件 - 但警报并未显示在锁定屏幕上方。

0 个答案:

没有答案