2017-02-17 4 views
1

NFCを使用してカードをエミュレートしようとしています。Android NFCカードのエミュレーションでカードをエミュレートしようとしました

私が期待しているのは、携帯電話をNFCリーダーに渡すと、リーダーがデータを読み取ることです(このデータは将来変更されます)。

  • 私は、このサンプルプロジェクトを使用しています:This sample project
  • 私はACS ACR128リーダーを使用していネクサス5
  • を使用しています:This reader

に電話を渡します私が理解しているところでは、エントリポイントはJavaクラスCardService.javaでなければなりません。しかし、メソッドprocessCommandApduは決して呼び出されません(私はそこにブレークポイントを挿入しようとしましたが、トーストさえも、そのコードは呼び出されません)。

私が理解できない主なものは次のとおりです。私は何か間違っていましたか?このことはできますか?

+0

エミュレートされたカードと対話するために読者側では何をしましたか? –

+0

読者について私はそれを動作させるためにドライバをインストールしたばかりです – Riccardo

+0

そうするようにプログラムしていないと、なぜ読者は何かを読むと思いますか? –

答えて

3

着信APDUコマンドのためにprocessCommandApdu()メソッドを呼び出すには、まずアプリケーションを選択する必要があります。選択はISO/IEC 8716から4に従って(AID/DF名で)コマンドをSELECTを使用して行われます:<Lc><AID><AID>の長さである

 
00 A4 04 00 <Lc> <AID> 00 

アプリに登録されたアプリケーション識別子です。

ISO/IEC 8716-4のアプリケーション構造(SELECT(AID)コマンドによるアプリケーションの選択)はのみです。 AndroidはHCE上のアプリケーションとの対話を開始できます。したがって、異なるメカニズムを使用するカード(カードアプリケーション)をエミュレートすることはできません。 (少なくとも、カスタマイズされたROMやXceed経由でAndroidシステム自体を変更する必要はありません)

例プロジェクトでは、res/xml/aid_list.xmlという名前のファイルでAIDを登録しています。このファイルには、順番にAIDフィルタのエントリを含むAIDグループ、登録:

<aid-group android:description="@string/card_title" android:category="other"> 
    <aid-filter android:name="F222222222"/> 
</aid-group> 

を従って、例えばアプリに登録されているデフォルトのAIDはF222222222です。したがって、次のSELECT(バイトAID)コマンドを使用してアプリケーションを選択することができます。

 
00 A4 04 00 05 F2 22 22 22 22 00 
関連する問題