【问题标题】:Can I get a notification whenever the user interacts with an Android device?每当用户与 Android 设备交互时,我可以收到通知吗?
【发布时间】:2013-10-26 00:04:21
【问题描述】:

在 Android API 级别 15 中是否有可能在用户执行任何使设备保持唤醒的操作时收到通知 - 实际上是在调用 PowerManager.userActivity() 时收到通知?

(背景知识:我正在为具有固定电源的非移动设备开发大型 Android 应用程序。当用户与屏幕、键盘等交互时。我需要发送“保持清醒”向另一个连接的设备发出信号。)

【问题讨论】:

  • 是否可以接受有根选项?
  • 我问是因为如果设备已植根,那么是的,你可以。如果没有,那就没有什么好办法了。请参阅我的类似问题:stackoverflow.com/questions/18882331/… 我最终不得不使用用户必须手动启用的可访问性服务,并且它不会检测到所有用户交互。所以这不是一个最佳的情况。如果你是 root,请查看:source.android.com/devices/tech/input/getevent.html

标签: java android power-management


【解决方案1】:

好吧,如果它是您自己的Activity,那么您可以随时使用onUserInteraction()onUserLeaveHint() 方法。

替代方法是使用此处提到的技术侦听来自Service 的所有触摸事件:Creating a system overlay window (always on top)

【讨论】:

  • 这几乎是完美的,除非在this answer 中指出,当用户与对话框交互时它不起作用。我目前正在开发的应用程序广泛使用对话框片段,因此这对我不起作用,但作为一个通用解决方案,它非常好。我需要一些更底层的东西。 :)
  • 我认为您所需要的只是一个基本片段,您可以从中扩展所有片段。在你的基本片段中只写onUserInteraction(),它又调用getActivity().onUserInteraction()。现在,只要您认为用户进行了交互,只需从您的每个扩展片段中插入 onUserInteraction() 调用。这类似于在您的代码中调用Log
  • Fragment 中没有 onUserInteraction()。 :(
  • 不,我的意思是在你的Fragment 中写下你自己的onUserInteraction()(随便命名),从那里调用你的Activity's onUserInteraction(),你已经写了你的逻辑来保留其他设备已唤醒。
  • 我相信这是一个很好的解决方案。 @Mark Whitaker 请解释为什么这对您不满意?我不认为应用程序的复杂性可能是这里的问题。 M-WaJeEh 提供的解决方案是完全可扩展的。但也许我们都弄错了..?那么我们需要更多的解释。
【解决方案2】:

android.intent.action.ACTION_SCREEN_ON(屏幕打开时)或android.intent.action.USER_PRESENT广播上触发您的信号还不够吗?在这里阅读更多:http://developer.android.com/reference/android/content/Intent.html#ACTION_USER_PRESENT

【讨论】:

  • 我不这么认为。如果我正确阅读了文档,则仅在 a) 屏幕亮起时和 b) 分别在用户通过键盘锁时发送。在我的设备上,屏幕永远不会熄灭,也没有键盘保护。我只需要在用户交互时不断发送“保持清醒”消息。
  • 如果没有办法让安卓设备在不活动时休眠,那么我会使用前置摄像头来检测用户的活动。
  • 认为您误解了这一点。我没有说设备不能进入睡眠状态,我说当它处于活动状态时,它必须保持另一个设备处于活动状态。另外,没有前置摄像头。 (正如我所说,它是“固定电源的非移动设备”——显然不是手机!)
  • 我自己没有做过这方面的工作,但我猜这个链接谈到了类似的事情。 stackoverflow.com/questions/6714020/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
相关资源
最近更新 更多