无论如何都要检查是否从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消息。
答案 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
...
}
可能这会解决你的问题。