2013-02-21 3 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 требует, чтобы вы обработали полученное сообщение NDEF внутри onResume.

ответ

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().