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

时间:2013-02-21 14:33:15

标签: java android nfc nfc-p2p

无论如何都要检查是否从Android中从睡眠状态唤醒的设备调用了onResume?

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

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

你可能会说“从onResume中取出那个processintent方法”......这不是一个选项,NFC P2P模式要求你在onResume中处理收到的NDEF消息。

2 个答案:

答案 0 :(得分:2)

我认为您可以尝试使用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()被调用之前你是否会总是收到意图。

答案 1 :(得分:2)

我建议覆盖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
  ...
}

可能这会解决你的问题。