第2回 まずは使ってみよう!HCEのお試しアプリを作ってみた

アメリカではマクドナルドでAndroid Payが使えるようになったと噂されてる今日この頃、皆さんいかがお過ごしでしょうか?どんどんNFC HCEが身近なものになってきてますね。

さて、第1回ではNFC HCEが何かをお伝えしましたが、今回は実際にNFC HCEを使ってみたいと思います。

 

準備するもの

     (1)NFC R/Wに対応したAndroid端末(Android 4.4以降)

     (2)NFC HCEに対応したAndroid端末

     (3)Android StudioをインストールしたPC

あれ、もう難しくなってきました??いやいや、これも結構簡単なんですよ。

(1)NFC R/Wに対応したAndroid端末(Android 4.4以降)

これは、

  • 設定アプリ内「端末情報」の「Androidバージョン」の記載が4.4以降。
  • 「無線とネットワーク」の設定周辺に、NFCの設定項目がある。

の条件に当てはまれば、問題ないでしょう。おそらくここ1年以内に買ったAndroid端末の殆どは、この条件に当てはまると思います。

(2)NFC HCEに対応したAndroid端末

これを確認するためには、2つの方法があります。

一つ目の方法は、Androidの知識に自信のある方向け。対象端末のAndroid featureに”android.hardware.nfc.hce”が入っているかを調べましょう。

 

二つ目の方法はアプリに頼る方法。ここにNFC HCEに対応しているかを判断出来るアプリがあります。

このアプリを対象端末にインストールして、[About]の中の[NFC features]内にある[HCE support]項がYesになっているかどうかで確認が出来ます。

私が確認出来たのは、Nexus 5、Nexus 6、Nexus 7(2013)くらいですね。

(3)Android StudioをインストールしたPC

これはWeb上にたくさん情報があると思うので、ここでは大きくは触れません。

ここからダウンロードして、インストールしてください。

 

アプリを作ってみる

さて、ここからは実際にアプリを作ってみます。

とはいっても、実はAndroid Studioの中にサンプルソースコードが存在してるので、今回はそのサンプルソースコードを使って、実際にNFC HCEを体験してみましょう。

Card Emulation側

まずはAndroid Studioを起動して、以下の通り設定してみてください。

setup_as_1

setup_as_2

setup_as_3

 

これでCard Emulationプロジェクトが開きます。

 Android端末とPCをUSBケーブルで接続したら、画面中央の上のほうにある三角マークをクリックして、アプリを起動しましょう。

android_studio

デバイスを選択する画面が別で開きますので、ここでは接続しているAndroid端末を選択してください。なお、Card Emulation側で使用するAndroid端末はNFC HCEに対応しているものを使用します。

choose_device

Card Reader側

Card Readerのソースコードもサンプルアプリとして取得できます。

やり方は、Card Emulationの時とほぼ同じです。

(サンプルソースコードを選択する画面で”Card Reader”を選択する。その他はCard Emulationの時と同じ手順でOK)

 

アプリを起動してみる

では、実際に動かしてみましょう。

私たちトンガロイドメンバーは

  • NFC R/Wに対応したAndroid端末(Android 4.4以降) として Nexus7(2012) ※lollipopへアップデート済み
  • NFC HCEに対応したAndroid端末としてNexus6

の2つのAndroid端末を使用しました。

 

まず、Card Emulation側を起動してみましょう。

アプリを起動すると下記のような画面が現れます。

CardEmulation_gamen

 

次に、Card Reader側を起動してみましょう。

CardReader_gamen

Card Reader側はCardの読み込みを待っているので「Waiting・・・」と表示されています。

 

ここで、Card Emulation側とCard Reader側のNFC部分を近づけて通信させてみると・・・

CardEmulation_connect

 

Card ReaderでCard Emulation側の番号が読み取れました!

CardReader_result

 

 

実際に動かしてみたときの動画はこちら。

ソースコードのポイント

さて、今回使用したソースコードの内容に関しても少し説明しておきます。

Card Emulation側のポイント

Android4.4からは簡単にHCEのサービスを実装できるようにHostApduServiceというクラスが準備されています。サンプルソースコード上でもCardService.javaはこのクラスを継承して作成されています。

HostApduService

このクラスではprocessCommandApdu()とonDeactivated()の2つの抽象メソッドが定義されているためこれらの関数を実装することが必要です。

processCommandApdu()はCard Reader側と通信が確立してReader側から要求を受けたときにコールされます。また、onDeactivated()は通信が途切れた時にコールされるメソッドです。

Card Reader側のポイント

Reader側では、NfcAdapter#enableReaderMode()の実施が必要になります。
このメソッドは、NFCコントローラをリーダモードに制限するもので、このモードの間は、Android Beamやエミュレーションモードは、無効化されます。

NfcAdapter#enableReaderMode()を実施せずに、CardEmuration側の端末と近づけて読み取りを行うと、
Android Beamや、詳しくは述べませんが、LLCPという別の接続が働いてしまい、HCEの読み取りが出来ないのです。

このメソッドは、Android4.4以降に新たに追加されたものなので、Reader側にも、Android4.4以降の端末が必要になるわけですね。

 

このあたりのより詳しい内容に関してはAndroid Developerのサイトで解説されています。

 

次回は、このサンプルアプリをベースに、変更を加えて遊んでみたいと思います!お楽しみに!

Leave a Reply

メールアドレスが公開されることはありません。