質問: Xamarin.FormsでNFCアプリを作ろうとしています。 基本的な読み取りはできることを確認できました。 次のステップとして、アプリっぽくするために「ボタンを押したらNFCへのアクセス可能状態に」→「NFC読み取りを検知してそれぞれの処理へ」といった処理遷移を行いたいと考えていますが、どのような実装が適切でしょうか? 現在実装出来ている範囲では以下のような状態です。 「アプリケーションが起動時に常に読み取り待機状態となる」 「NFC機器のメモリからデータを読み出し、(byte配列情報を変換して)画面等に表示する」 その先の実装に関して不明瞭な点としては * 「読み取り待機状態をダイアログ等で表示してNFCアクセスへの待機状態をユーザーに知らせる。」 ・・・まず、待機状態ダイアログ周りの実装がうまくいっていません。 * 「待機状態のときのみ、NFCとの通信を可能にし、待機状態とする」(ボタンを押したらアクセス可能状態に) * 「NFCとのアクセスを検知できた場合、画面の状態に合わせて通信内容を変更する」(読み取りを検知して、それぞれの処理へ) Androidベースで開発してるため、用語がそちらにかたよるかもしれませんが、現状の理解度は以下のような感じです。 ・NewIntentはアプリ起動時には常に発生する可能性がある? ・それをキャッチした際に、画面のStatusにより、やるべき処理を切り分ければよい? ・読み取りをしてほしくないタイミング(ダイアログを表示していない場合)では、フラグなどにより処理を無視すればよい? ・そういったフラグやstatusは、MainActivity内に実装すべき?ViewModel側で制御可能? 非同期処理的な考えかたと、イベントの発生に関する理解が足りていないことが問題かと認識しています。 よろしければご意見お聞かせいただきたいと思います。
回答: > > Androidベースで開発してるため、用語がそちらにかたよるかも > > > この内容でしたら Xamarin はほとんど関係なく、 Java-Android の質問として投稿された方が回答が得られやすいと思います。 その上で Java-Android に関する点で答えられる点に回答します。 > > NewIntentはアプリ起動時には常に発生する可能性がある? > > > Activity のライフサイクル再確認 - Qiita にある通り、`OnNewIntent` は、LaunchMode によって発生する場合としない場合があります。 そしていずれもアプリの起動時ではなく、起動中のActivityに対して何らかのアクションを起こしたときに発生します。 NFC の読み取り待機状態については、`OnNewIntent` で受け取る方法に加え、「NFC Reader Mode」と呼ばれる、コールバックで受け取る方法もあります。 Android 4.4で追加されたNFC reader mode - Qiita Reader Mode を使う場合は、Activity のライフサイクルを意識しなくてよいので、こちらの方が使いやすいかも知れません。