2013-02-21 202 views
2

是否有无论如何检查onResume是否从在Android中从睡眠状态唤醒的设备中调用?如何确定设备是否已从睡眠模式内部被唤醒onResume

我之所以需要检查这是我不希望在从睡眠状态恢复它来调用特定的方法:

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

你可能会说“把processintent方法出来的onResume的”。 ..这不是一种选择,NFC P2P模式要求您在onResume内处理收到的NDEF消息。

回答

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 
    ... 
} 

可能的,这将解决您的问题。

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