【问题标题】:Receiving Touch Events from a Service从服务接收触摸事件
【发布时间】:2012-07-03 21:38:15
【问题描述】:

我目前正在从服务接收触摸事件。

我想到的一种方法是在系统视图上使用 TouchDelegate,将其边界扩展到屏幕,然后从委托中接收触摸事件。

但是,当我使用

((Activity)ctx).getWindow().getDecorView().setTouchDelegate(new TouchDel(bounds, view));

在我的服务中,我得到一个空指针异常和强制关闭。

【问题讨论】:

  • 你找到解决方案了吗?

标签: android service touch-event


【解决方案1】:

确实没有机制可以直接注册Service 以全局接收来自系统的触摸事件。您的应用程序中的Activity UI 需要将它接收到的事件交给您的Service。在不了解您对它们的具体用途的更多信息的情况下,我只能建议一种通用方法。一种可能的方法可能是:

  • 在您的Activity 类中,覆盖dispatchTouchEvent() 以在每个事件发送到您的应用程序时收到通知。注意不要覆盖返回行为,这会破坏视图中的触摸处理。
  • MotionEventParcelable,因此您可以将每个事件打包到 Intent 中,并将它们作为启动命令发送到您的 Service
  • 或者,将您的 Service 实现为绑定服务,以便应用程序中的每个 Activity 可以绑定到它并直接调用方法,并让每个 MotionEvent 以这种方式传递。

【讨论】:

  • 但是如果在 Activity 之外接收触摸事件,比如在主屏幕上呢?一个活动是一个屏幕,而 Activity.dispatchTouchEvent() 是一个方法,它只返回触摸事件调度到该活动。一旦 Activity 离开屏幕,它就无法继续接收触摸事件。
  • Android 设计上不支持接收应用程序上下文之外的任何事件。即使是可能不在用户面前的服务,仍然受应用程序进程上下文的约束。添加此类功能需要在自定义 ROM 映像中修改 Android 系统服务/内核。
猜你喜欢
  • 2012-07-04
  • 2015-11-07
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
相关资源
最近更新 更多