您如何识别用户30分钟未使用手机?
使用Jiro看到它处于水平位置?
是否有任何Android内置标志?
答案 0 :(得分:4)
您应该尝试使用基于显示的事件以及最后一次启用事件。
为ACTION_SCREEN_ON
,ACTION_SCREEN_OFF
和ACTION_USER_PRESENT
注册广播接收器并正确保存时间戳。
请注意,如果WhatsApp等应用程序自动启用显示器以显示新消息,则Screen-Events也会被触发。因此,你应该坚持ACTION_USER_PRESENT。
以下是一些代码:
<强> Android的的Manifest.xml 强>
<receiver android:name=".UserPresentBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
广播接收器
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class UserPresentBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent intent) {
/*Sent when the user is present after
* device wakes up (e.g when the keyguard is gone)
* */
if(intent.getAction().equals(Intent.ACTION_USER_PRESENT)){
}
}
}
代码的积分转到Chathura Wijesinghe
注意:您需要一个单独的线程(最好是一个守护程序线程)来将该时间戳与当前时间进行比较。
答案 1 :(得分:4)
听取ACTION_SCREEN_OFF
启动计时器,并仅在收到ACTION_USER_PRESENT
时清除计时器,这样当某些应用程序打开屏幕时,您不会意外清除计时器。
对于上述方法,您可以在启动计时器时包含以下内容。这样,您可以在屏幕关闭时考虑自动锁定延迟。
Settings.Secure.getLong(getContentResolver(), "lock_screen_lock_after_timeout", 5000);
或者,您可以使用KeyguardManager
检查屏幕关闭后是否每隔1ms左右启用锁定屏幕。
一般来说,这个想法是lock screen --> idle; no lock screen --> not idle
答案 2 :(得分:2)
您可以通过调用isScreenOn方法检查屏幕是否已关闭。
注意:这只能用于2.1及以上
您还可以使用Intent.ACTION_SCREEN_OFF来确定屏幕状态。请查看此link以获取示例。
参考:isScreenOn和this。
答案 3 :(得分:1)
很大程度上取决于你如何定义&#34;空闲&#34; ,屏幕关闭并不意味着你的设备是空闲的,最常见的情况是,如果有一个应用程序持有PARTIAL_WAKE_LOCK
虽然如果你有后台服务运行就行不通,就像utorrent app一样。
因此,如果你想使用屏幕开/关选项我会 建议你检查活动的唤醒锁(&#34; adb shell dumpsys 功率&#34;找到设备当前有效的唤醒锁
还有一种方法可以尝试,虽然它可能有点乏味(取决于你想要定义IDLE的准确程度)
使用Android公开的Systrace(LINK)功能跟踪cpu频率和其他参数的主机,这样你可以监控不同程度的&#34; idle-ness&#34;同样。
有专门的选项来跟踪CPU负载和CPU空闲事件
1。)Android 4.3以上(api 18及以上):使用&#34;空闲&#34;(CPU空闲)和 &#34;负载&#34; (CPU Load)作为列表类别选项。
2.。)Android 4.2及以下版本(api 18以下):使用&#34; -i, - cpu-idle&#34;追踪 cpu空闲事件和&#34; -l, - cpu-load&#34;对于CPU负载百分比( 虽然你需要cpu空闲事件应该做的工作)。
通过链接获取详细说明,谢谢。