Android:检测用户是不是停止使用手机一段时间
Posted
技术标签:
【中文标题】Android:检测用户是不是停止使用手机一段时间【英文标题】:Android: Detect if user stopped using his phone for a whileAndroid:检测用户是否停止使用手机一段时间 【发布时间】:2015-03-26 13:49:38 【问题描述】:我想找到一种可靠的方法来检测用户是否有一段时间停止使用他的手机。在这种情况下,我想向用户显示一些对话框。我想了几个方法,但我不确定哪一个可以实现。
-
如果用户有一段时间没有触摸他的屏幕(例如 1 分钟)并且音频系统处于非活动状态*,他很可能会停止使用手机并进行其他操作。在我看来,这应该是相当可靠的,但我不确定它是否可以实现。是吗?
几乎与方法 #1 类似,但这次如果屏幕关闭了一段时间。这应该可以使用广播接收器来实现(
ACTION_SCREEN_OFF
:节省时间;ACTION_SCREEN_ON
:检查,如果now - saved_time > 1 min
)。我说的对吗?
手机有一段时间没有移动。但是,这不包括用户将手机放在口袋里的情况。所以它可能只有与其他东西结合起来才是可靠的。
您是否遇到过实现此用例的其他方法?您是否遇到过具体的实施想法?您在上述方法中发现了哪些问题?提前致谢!
*因为否则他可以听音乐或看一些视频。静音视频呢?
【问题讨论】:
【参考方案1】:我想我会从这里列出的方法开始:Application idle time
这将涵盖直接用户交互的情况,但正如您所提到的,它不会涵盖音乐/视频,因此您也可以编写一个变体:How do you check if music is playing by using a broadcast receiver?
不幸的是,这仍然是静音视频的边缘情况:这部分有点棘手,因为没有用于视频播放的广播。您可以使用您提到的方法来检查屏幕是否已经关闭了一段时间(没有视频可能正在播放),但是您会遇到用户有很长的屏幕超时的边缘情况,所以即使视频没有t 播放屏幕可能会持续 10 分钟。
您可以使用 ActivityManager 来查看设备上正在进行的进程,所以这可能对您有用吗?我不认为我已经涵盖了所有内容,但我希望这可能会有所帮助。
【讨论】:
【参考方案2】:你应该有几个监听器和接收器。
例如 NetworkReceiver 会随着连接的改变而改变。 验证是否已接听或接收(并挂接)电话。
验证屏幕是否打开/关闭和/或是否已安装/删除应用。
您还可以为 DeviceAdmin 授予应用权限以检查锁是否已被移除/启用。
您可以授予应用程序在显示屏上挂钩键输入/焦点等的权限(AccessibilityService)
完成此操作后,您可以使用 sharedpreferences 编写最后一个时间戳并重置 AlarmManager。
AlarmManager 应该在您希望确保设备已关闭的时间内运行。如果设置已更改,您可以验证共享首选项。
【讨论】:
以上是关于Android:检测用户是不是停止使用手机一段时间的主要内容,如果未能解决你的问题,请参考以下文章
在我的颤振(android)应用程序中 - Firebase 推送通知在一段时间后停止接收每个用户