2

Androidのスリープ状態からウェイクアップしているデバイスからonResumeが呼び出されたかどうかを確認する方法はありますか?

これを確認する必要がある理由は、スリープ状態から再開した場合に特定のメソッドを呼び出さないようにするためです。

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

「そのprocessintentメソッドをonResumeから削除する」と言うかもしれません...これはオプションではありません。NFCP2Pモードでは、受信したNDEFメッセージをonResume内で処理する必要があります。

4

2 に答える 2

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 に答える
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 に答える