如何识别手机闲置?

时间:2014-03-08 20:39:11

标签: java android sleep

您如何识别用户30分钟未使用手机?

使用Jiro看到它处于水平位置?

是否有任何Android内置标志?

4 个答案:

答案 0 :(得分:4)

您应该尝试使用基于显示的事件以及最后一次启用事件。

ACTION_SCREEN_ONACTION_SCREEN_OFFACTION_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以获取示例。

参考:isScreenOnthis

答案 3 :(得分:1)

很大程度上取决于你如何定义&#34;空闲&#34; ,屏幕关闭并不意味着你的设备是空闲的,最常见的情况是,如果有一个应用程序持有PARTIAL_WAKE_LOCK

  1. )解决这个问题的一种方法是许多用户在这里建议听SCREEN_ON / OFF和ACTION_USER_PRESENT结合keygaurd或windowmanager api来检测用户输入是否正在发生。
  2. 虽然如果你有后台服务运行就行不通,就像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空闲事件应该做的工作)。

    通过链接获取详细说明,谢谢。