【问题标题】:Receiving Touch Events from a Service (Solution?)从服务接收触摸事件(解决方案?)
【发布时间】:2012-07-04 13:12:47
【问题描述】:

所以,之前我发布了一个关于从服务接收触摸事件的问题(显然没有人知道答案)。

在自己尝试了几个小时后,我放弃了,并决定向名为 RubberBigPepper 的开发人员发送电子邮件。我问他在他的应用音量控制中是如何做到的,他立即回复“TYPE_SYSTEM_ALERT 窗口”。

这是什么意思,如何在代码中实现?

编辑:

我使用了以下方法:

getWindow().addFlags(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

并且窗口无法接收到触摸事件。

我也给他发了电子邮件,他说:“使用 WindowService 来添加你的窗口”

【问题讨论】:

    标签: android service touch-event


    【解决方案1】:

    我使用这样的代码。

    int nFlags=WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;       
                 m_cWM=(WindowManager)getSystemService(Context.WINDOW_SERVICE);
                 WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
                    nFlags,
                    PixelFormat.TRANSLUCENT);
    m_cWM.addView(YourViewClass, lp);
    

    别忘了使用权限

    【讨论】:

    • 这是我所拥有的:TextView tv = new TextView(this); tv.setText("你好"); int nFlags=WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; m_cWM=(WindowManager)getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams lp = new WindowManager.LayoutParams(...) m_cWM.addView(tv, lp); - 但文本视图只出现在活动中。当我导航回家时,它会消失并且设备停止记录触摸。
    • 幸运的是,这不再适用于较新版本的 Android。您可以接收触摸事件,但您随后会使用它们,而底层应用程序不会接收它们。
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多