Android:检测用户是否停止使用手机一段时间

时间:2015-03-26 13:49:39

标签: java android broadcastreceiver android-broadcast

我想找到一种可靠的方法来检测用户是否停止使用他的手机一段时间。在这种情况下,我想向用户显示一些对话框。我想了几个方法,但我不确定哪一个可以实现。

  1. 如果用户暂时没有触摸他的屏幕(例如1分钟)并且音频系统处于非活动状态*,他很可能会停止使用他的手机并做其他事情。在我看来,这应该是非常可靠的,但我不确定,如果它是可实现的。是吗?
  2. 几乎像方法#1,但这次如果屏幕关闭了一段时间。这应该可以使用广播接收器实现(ACTION_SCREEN_OFF:节省时间; ACTION_SCREEN_ON:检查,如果now - saved_time > 1 min)。我是对的吗?
  3. 电话暂时没动了。然而,这将不包括用户将手机放入口袋的情况。所以它可能只有与其他东西结合才能可靠。
  4. 您是否遇到其他方法来实现此用例?您是否遇到过具体的实施想法?您在上述方法中看到了哪些问题?提前谢谢!


    *因为否则他可以听音乐或看一些视频。静音视频怎么样?

2 个答案:

答案 0 :(得分:1)

我想我会从这里列出的方法开始:Application idle time

这将涵盖直接用户互动的情况,但正如您所提到的,它不会涵盖音乐/视频,因此您也可以写一个变体:How do you check if music is playing by using a broadcast receiver?

不幸的是,这仍然让您的视频静音:这部分有点棘手,因为没有视频播放广播。你可以使用你提到的方法来检查屏幕是否已经关闭一段时间(没有视频可以播放),但是你有一个边缘情况,用户有一个很长的屏幕超时,所以即使视频不是'播放屏幕可能会持续10分钟。

您可以使用ActivityManager查看设备上正在进行的进程,这可能对您有用吗?我认为我没有涵盖所有内容,但我希望这可能会有所帮助。

答案 1 :(得分:0)

你应该有几个听众和接收者。

例如,为连接更改而更改的NetworkReceiver。 验证是否已接听或接听(并挂钩)电话。

验证屏幕是否已打开/关闭和/或是否已安装/删除应用程序。

您还可以为DeviceAdmin授予应用程序权限,以检查锁定是否已被删除/启用。

您可以为应用程序授予钩子以显示关键输入/焦点等(AccessibilityService)

完成此操作后,您可以使用sharedpreferences写入最后一个时间戳并重置AlarmManager。

AlarmManager应运行您想要确保设备已关闭的时间。然后,如果设置已更改,则可以验证共享首选项。