そのため、現在、Android HCE (ホストベースのカード エミュレーション) を使用してスマートカードをエミュレートするシンプルなアプリを構築しています。アプリは、受信したすべての APDU コマンドに対して {90,00} バイト配列のみを返します。コードは次のとおりです。
public class MyHostApduService extends HostApduService {
@Override
public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
byte[] response = new byte[2];
response[0] = (byte)0x90;
response[1] = 0x00;
return response;
}
//Rest of the code...
}
そして、このようにjavax.smartcardio.CardTerminalのCardTerminal.connect()メソッドを使用して、スマートフォン(Sony Xperia M2を使用しています)をスマートカードリーダー(ACR122U-A9)に接続しようとしました
Card card = terminal.connect("*");
実際のスマート カードでは機能しましたが、私の電話には接続したくありません。ビープ音はするが、LED が消灯し (実際の IC カードを検出したときのように緑色にはならない)、スマートフォンを取り外すと CardException が発生し、LED ライトが赤色に戻りました。リーダーが電話に接続されているように見えても (LED が緑色に変わった)、電話が APDU を受信していないように見えることがあります。springcard の scScriptor.exe を使用して接続しようとしましたが、同じ結果になりました。
コードに欠けているものはありますか?それともおそらく技術的な問題ですか?
編集:友人のgalaxy s iiiにapkファイルをインストールしましたが、動作しているので、これは電話の問題であると思われます