如何查找Android手机是否处于睡眠/空闲模式

时间:2011-07-14 10:25:17

标签: android

如何查找Android手机是否处于睡眠/空闲模式?

我的问题是我可以使用闹钟管理器从睡眠模式唤醒手机

但是当手机处于睡眠模式并且在同一时刻如果使用闹钟管理器来唤醒手机......安德拉力量会关闭应用程序..

无论是否有电话处于睡眠或空闲模式?(黑屏)

更新

我的要求:

当手机处于睡眠模式时--->意图应该从服务启动 当手机未处于睡眠模式时 - >应该从服务

启动相同的Intent

下面的解决方案都没有完美地工作,所以这里是我的小调整,完美地工作:):))

  //Pending intent for my alarm manager 
  Intent intentaa=new Intent(this,MyBroadcastReceiver.class);
  PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intentaa, 0);

  //Intent to be launched where MyIntent is the intent
  Intent intenta = new Intent();
  intenta.setClass(this, MyIntent.class);
  intenta.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

  //Real code
  try
  {
   startActivity(intenta); 

  }catch(Exception E)
  {

      AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
      am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime(),
      pendingIntent);
      startActivity(intenta); 

   }    

4 个答案:

答案 0 :(得分:15)

您可以通过调用isScreenOn方法检查屏幕是否已关闭。

注意:这只能用于2.1及以上..

答案 1 :(得分:5)

仅当屏幕打开或关闭时,

isScreenOn方法才会返回。它并不表示困倦模式,因为Android睡眠模式与Android屏幕关闭模式不同。在Android中,屏幕关闭(空闲模式)后,睡眠模式可能在几毫秒内(取决于唤醒锁) - 但这并不能保证(参考this post)。

我认为您可以尝试使用SystemClock.uptimeMillis()SystemClock.elapsedRealtime()比较。

答案 2 :(得分:3)

查看isInteractive()

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
  return pm.isInteractive();
} else {
  return pm.isScreenOn();
}

答案 3 :(得分:0)

我不确定你想要什么,但你可以使用Intent.ACTION_SCREEN_OFF来确定。见here an example