是否有任何方法可以检查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()
之前收到意图。