如果设备已被唤醒或进入睡眠状态,如何检查应用程序

时间:2014-08-06 05:51:27

标签: android

在我的Android应用程序中,我希望在设备唤醒时收到通知 当设备进入睡眠状态时 基于此,我必须执行一些操作。 请帮忙。

请注意

  

SCREEN_ON / OFF不同。屏幕可能是关闭但设备可能   在接到电话的情况下仍处于唤醒状态。什么时候我们   将手机放在我们的耳朵接近传感器关闭屏幕,   但设备没有进入睡眠状态。

2 个答案:

答案 0 :(得分:2)

您可以捕获内置的IntentFilters。

Intent.ACTION_SCREEN_ON
Intent.ACTION_SCREEN_OFF

使用服务和广播接收器组合,您可以实现您所寻求的目标。

您会找到完整的演示HERE

<强>更新

您可以使用PowerManager类的一些方法。

PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);

if(pm.isScreenOn()){
   // not sleep
}else{
  // sleep
}

API级别&gt; = 20

if(pm.isInteractive()){
   // not sleep
}else{
  // sleep
}

说明:

public boolean isScreenOn ()

在API级别7中添加 此方法在API级别20中已弃用。 请改用isInteractive()

如果设备处于交互状态,则返回true。

由于历史原因,此方法的名称是指屏幕的电源状态,但它实际上描述了设备的整体交互状态。此方法已被isInteractive()替换。

此方法返回的值仅指示设备是否处于交互状态,该状态可能与打开或关闭屏幕无关。要确定屏幕的实际状态,请使用getState()

返回 True如果设备处于交互状态。

参考HERE

答案 1 :(得分:0)

http://androidexample.com/Screen_Wake_Sleep_Event_Listner_Service_-_Android_Example/index.php?view=article_discription&aid=91&aaid=115

我认为此链接可以解决您的问题

  import android.content.Context;
  import android.content.Intent;
  

公共类AEScreenOnOffReceiver扩展了BroadcastReceiver {

    private boolean screenOff;

    @Override
    public void onReceive(Context context, Intent intent) {

        //Toast.makeText(context, "BroadcastReceiver", Toast.LENGTH_SHORT).show();


        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {

            screenOff = true;

        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {

            screenOff = false;

        }

        // Toast.makeText(context, "BroadcastReceiver :"+screenOff, Toast.LENGTH_SHORT).show();

        // Send Current screen ON/OFF value to service
        Intent i = new Intent(context, AEScreenOnOffService.class);
        i.putExtra("screen_state", screenOff);
        context.startService(i);
    }

}