如何在onResume中确定设备是否已从睡眠模式唤醒



是否有任何方法可以检查onResume是否是从Android中从睡眠状态唤醒的设备中调用的?

我需要检查的原因是,如果从睡眠状态恢复,我不希望它调用特定的方法:

@Override
public void onResume() {
    super.onResume();
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())
        && !SomeCrazyMethodOrPropertyCheckingIfDeviceWakedUpFromSleep) {
        processIntent(getIntent());
    }
}

你可能会说"去掉onResume中的processintent方法"。。。这不是一个选项,NFC P2P模式要求您在onResume内处理接收到的NDEF消息。

我建议重写onNewIntent()以处理NFC意图:

@Override
public void onNewIntent(final Intent intent) {
  setIntent(intent);
  if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
    processIntent(intent);
  }
}

processIntent()中,您可以检查意图是否已经处理:

private void processIntent(final Intent intent) {
  if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
//  Log.v(TAG, "Ignoring intent; already treated this intent.");
    return;
  }
  intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
  // new intent; process it
  ...
}

这很可能会解决你的问题。

我认为您可以尝试使用ACTION_SCREEN_ON:

  • 为它注册一个接收器(你需要在代码中注册它,它在清单中不起作用)
  • onReceive中执行以下操作:

MY_FLAG_JUST_WAKE_UP = true;

并且在onResume():中

if(!MY_FLAG_JUST_WAKE_UP){
  doStuff();
}
MY_FLAG_JUST_WAKE_UP = false;

但是,它需要测试,我不知道你是否总是在调用onResume()之前收到意图。

最新更新