如何确定用户未使用手机达30分钟?
使用Jiro查看手机是否处于横向位置?
Android中是否有内置标志来识别这一点?
您应该尝试基于显示器的事件进行工作,以及最后一次启用它的时间。
为 ACTION_SCREEN_ON
、ACTION_SCREEN_OFF
和 ACTION_USER_PRESENT
注册广播接收器,并正确保存时间戳。
请注意,屏幕事件也可能由诸如 WhatsApp 等应用程序触发,如果它们自动启用显示器来显示新消息。因此,您应该更多地依赖 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)){
}
}
}
USER_PRESENT
会使我的延时计数器归零。但是这个事件会在每次用户触摸时触发吗? - Elad Benda监听 ACTION_SCREEN_OFF
事件来启动计时器,只有在收到 ACTION_USER_PRESENT
事件时才清除计时器,这样当屏幕被某些应用程序打开时,你不会意外地清除计时器。
使用上述方法时,您可以在启动计时器时包含以下内容。这样,当屏幕关闭时,您就考虑了自动锁定延迟。
Settings.Secure.getLong(getContentResolver(), "lock_screen_lock_after_timeout", 5000);
另外,您可以使用 KeyguardManager
在屏幕关闭后每1毫秒左右检查锁定屏幕是否已启用。
一般来说,想法是:锁屏幕--> 空闲;未锁屏幕--> 非空闲
ACTION_USER_PRESENT
检查锁屏状态。通常应用程序不能解锁您的手机,除非它本身是一个锁屏替代品,或者您已经获取了访问该操作的 root 权限。如果屏幕已解锁,则可以假定用户想要与手机进行交互,这是可以的。 - StoneBird您可以调用isScreenOn方法来检查屏幕是否关闭。
注意: 仅适用于2.1及以上版本
此外,您还可以使用Intent.ACTION_SCREEN_OFF来确定屏幕的状态。请参考此链接中的示例。
参考资料:isScreenOn和this。
使用 Android 提供的 Systrace(LINK) 功能来跟踪 CPU 频率和其他参数,这样您就可以监视各种程度的“空闲”。
有专门的选项来跟踪 CPU 负载和 CPU 空闲事件
1.) Android 4.3 及以上版本 (API 18及以上):将 "idle" (CPU 空闲) 和 "load" (CPU 负载) 用作列表类别选项。
2.) Android 4.2 及以下版本 (API 18以下):使用 "-i, --cpu-idle" 来跟踪 CPU 空闲事件,使用 "-l, --cpu-load" 来跟踪 CPU 负载百分比 (尽管对于您的需求,CPU 空闲事件已足够)。
详细说明请查看链接,谢谢。