2

无论如何检查是否从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 消息。

4

2 回答 2

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()被调用之前收到意图。

于 2013-02-21T14:45:25.947 回答
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
  ...
}

这可能会解决您的问题。

于 2013-02-21T20:33:52.213 回答