ICカードリーダーを利用したICカード読み込みプログラム作成時の失敗解決メモです。
Windowsに添付されているwinscard.dllを利用して実現できます。
1.SCardEstablishContext・・・ICカードーリーダー利用開始2.SCardListReaders・・・現在接続されているカードリーダの名前を取得する
3.SCardGetStatusChange・・・カードリーダーの状態変化を検出する(カードがかざされた等)
4.SCardConnect・・・カードに接続
5.SCardTransmit・・・カードID取得などのコマンド送信
6.SCardDisconnect・・カードと切断
7.SCardReleaseContext・・・ICカードーリーダー利用終了
これらのメソッドを利用して、作成していきました。
その中で、ICカードが、かざされるまで「ICカードをかざして下さい」というメッセージ画面を表示するようにしました。その画面では、3のSCardGetStatusChangeを非同期で動かして、ICカードをかざされるのを待つようにしました。パラメータでINFINITEを指定することで、無限にずっと待つことができます。
ただ、INFINITEで無限待ちの時にで、読み込み待ちをキャンセルしたい場合は、どうすればよいのでしょう?「ICカードをかざして下さい」の画面には、もちろんキャンセルボタンをつけていて、キャンセルボタンが押された時です。
最初は、SCardReleaseContextを実行して、例外を発生させて、処理を中断させていたのですが、うまくいっていたように思えたのですが、やはり、強引なやり方だったようで、キャンセル時に、たまに意味不明なエラーがでる時がある・・・
よく調べたら、SCardCancelというのがありました。
そりゃそうですよね・・こちらを使用することで、すっきり解決できました。
閑話休題
android無料アプリを作っています。
メモ帳に簡単なパスワード機能がほしい、という方、こちらをぜひ
メモ帳を果物で隠してくれます~。
興味がありましたら、
こちらもよろしくお願いします。
カップラーメンの3分ひまつぶしに!