nfc-felica 公開しました

nfc-felica/android 2.3 nfc access felica command

今までのNfc関連エントリの成果として公開を開始しました。

Android 2.3からサポートされたNFC API(一部隠されたAPI)を使ってFeliCaカードにアクセスするためのクラス群を提供します。 FeliCa SDK等の専用のライブラリィを必要とせずにFeliCaカードにアクセスし通信を行うことができます。

  • サンプルアプリケーション(NFCTagFeliCaReader)の動かし方

プロジェクトはそのままNFCTagFeliCaReaderという名前のアプリケーションになっています。 アプリケーションをインストール後、SDKのNfcDemo同様にFeliCaカードをNfc機能を搭載したAndroidスマートフォンに翳すことで、インテント"android.nfc.action.TAG_DISCOVERED"がブロードキャストされますので、これを受信するActivityが起動してカードのデータを読み込みます。

  • コードについて

FeliCaPICC側にどのようなデータを送っているかは、NFCTagFeliCaReader.javaを追うことで理解できると思います。(FeliCaコマンドをそのまま送っても駄目な理由も分かります)

処理自体は全てFeliCa.javaで行っています。最終的にはコマンドも含めて綺麗な抽象化したいと考えていますが、現時点ではCommand(Response)、IDm、に留まっており、中途半端です。

  • 注意事項

一部隠蔽(@hide)されたクラスとAPIを使用しているため、予告なしにAndroid SDKの更新によって機能が使えなくなる可能性があります。
本機能はAndroid 2.3を搭載し、NFCチップ(SAMSUNG NXP's PN544 NFC chip)を搭載したAndroidスマートフォン上でのみ動作します。(2011/01/20現在、確認できているのは Nexus Sのみです)

現時点(2011/01/21においては以下のコマンドしか動作確認していません。

    • Polling
    • Request Service
    • Request Response
    • Read Without Encryption
    • Request System Code

認証が必要なコマンドに関してもコマンドコードの定数等は記述していますがその使用には個別に契約が必要ですので、本ライブラリィでは使えないと考えてください。

参考: FeliCa公式仕様
FeliCaカード ユーザーズマニュアル
FeliCa技術方式の各種コードについて

  • 謝辞

本プロジェクトとそのコードは以下の方々のご協力無しでは実現しませんでした。この場を借りてお礼申し上げます。

私にはどうしても分からなかった部分を解決してくださいました。大変感謝しております。

    • adamrockerさん

Gingerbread(Android2.3)でNFC書出しへの道のり - throw Life
今や我らのGoogle API Expertでらっしゃいます。Nfcの隠しクラスとそのAPIに関してBlogで詳しくまとめて頂いたおかげでこのプロジェクトがあります。

ABC2011WinterのためにもっとNFCについて調べた
vvakameさんの元気の良さとそのやる気にはいつも励まされます。ABC(Android Bazaar and Conference)のためにまとめた上記リンク先の資料が非常に参考になりました。


最後に。twitterandroidクラスタの方々にはとても刺激されました。皆さんのおかげでもあります。


※「FeliCa」は、ソニー株式会社が開発した非接触ICカードの技術方式です。
※「FeliCa」は、ソニー株式会社の登録商標です。
※ 本プロジェクトは SONYまたはFeliCa技術を用いるその他企業ともいかなる関係もありません。