2016-03-25 4 views
1

フォアグラウンドディスパッチを有効にしてアプリケーション内のNFCタグをスキャンするときは、onNewIntent()の前にonPause()が呼び出されます。 NFCインテントを既にonPause()に取得することができますか?インテントの起点に応じて処理を停止する(またはしない)ことができますか?NFCインテントonNewIntentの前にonPauseを呼び出す - onPauseコールの起点を知る方法?

アクティビティはフォアグラウンドにあり、タグをスキャンすると一時停止または再開しないでください。停止するか開始するタスクが/onResumeであるため、問題が確認できます。

getIntent().getAction()は常に「MAIN」ですが、確かにインテントのより正確な説明を得る方法が必要ですか?またはonNewIntent()と入力する前にNFCの意図を知ることはできませんか?

+0

あなたの意図フィルタを貼り付けます。 私はあなたのインテントフィルターにいくつかの問題があると思います。 – Akash

+0

IntentFilterでは問題ありません。 NFCのIntentFilterはonNewIntent()メソッドでのみ読み込まれ、onPause()にはまだ存在しません。私が必要とするのは、onPause()がシステムまたはユーザによって呼び出されたかどうかを検出できることです。 – zuokuok

+0

タップオンNFC onPauseを呼び出さないでください。 NFCイベントが生成されていますか? – Akash

答えて

3

いいえ、あなたのアクティビティに配信される前に、新しいインテントがどのようなものかを知ることはできません。onNewIntent()。それがonNewIntent()コールバックのポイントです。新しいインテントに関する情報をアクティビティに配信します。 getIntent()は常に明示的setIntent(newintent)を使用してその意図を更新しない限り、最初に活動を開始した意図を返すこと

@Override 
protected void onNewIntent(Intent intent) { 
    ... 
} 

注:このメソッドが呼び出されたときにのみ、あなたはその方法のintentパラメータを使用して、新たな意図を得ることができます。したがって、ランチャーを介してアクティビティを開始した場合は、目的のアクションMAINが表示されます。

/onResume()は、NFCサービスがインテントをあなたのアクティビティにディスパッチする方法のために呼び出されます。あなたはそれについて何もできません。実際には、アプリケーションロジックを区別するために必要なものであってはなりません。 が呼び出された場合は、明示的なユーザーUIのやりとりによって呼び出されたかどうかにかかわらず、通常どんな操作を行っても構わないはずです。あなた。現在のロジックが本当に2つを区別する必要がある場合は、おそらくonStopで行う方が良いでしょう。

+0

私は、タグがスキャンされたときに呼び出されていないことに気付いたときに、代わりにonStart/onStopを使用しました。あなたの答えは私のソリューションに加わるので、私はそれを検証します。 – zuokuok

関連する問題