しゃちょうがNexusSを買ってくれて、本日(12月27日)遂に届いたので早速NFCやってみます!!
12月28日追記しました!! 12月28日@yanzmさんに教えてもらったことを追加しました!! NFCって何?NFCっていうのは、Near Feild communication の略です。近距離通信でピッ!ってやると情報をやりとり出来る感じです。
日本で普及しているところだと、Felica(SuicaとかIcocaとかPasmoとかEdyとかnanacoに入ってます)はNFCの上に乗っかってる規格だそうです。
まずはサンプルを動かします!$ANDROID_HOME/samples/android-9/NFCDemo をどっか適当な場所にコピーして、Eclipseに取り込みます。
Androidプロジェクトを新規作成する手順で、"Create project from existing source"とかでソースを流用してプロジェクトを作る感じでOKです。
そうすると、一部のクラスが名前解決できずにエラーになります。
guava-libraries いれる足りないクラスは、guavaというライブラリに含まれているそうなので、ダウンロードしてきて突っ込みます。(@t_egg さんありがとう大好き><)
このへんから落とせます。僕が落としたのは guava-r07.zip でした。解答して libs ディレクトリをプロジェクトに掘って guava-r07.jar を突っ込んでビルドパスに追加します。(もう一個のjarはgwtって単語が入ってるので直感で違うと思われたので試しませんでした。)
これで、エラーは全て消えたはずです。
実行してみる!NexusSにインストールして実行してみます!!
Suicaを近づけてみると…
インストールしたサンプルアプリが選択肢に出現しました!
1秒以内かざすだけでもちゃんと検知してくれるみたいですね。かなり素早いです。
でも特に何かデータが取れるわけでもなく…。
コードを(少しだけ)読むとりあえずサンプルコードを読んで、何が行われているのか頑張ってみてみようと思います。
まずは定石通りAndroidManifest.xmlから。
AndroidManifest.xmlパーミッション
上記二つがついていますね。電話かけるのとかIntent飛ばせば済む話なのになんでついてるんだろう…?なんかあったっけ?
アクティビティランチャーから起動されるActivityはFakeTagsActivityとなっています。名前からして偽のNFC来ましたよIntentを投げる係の人でしょう。
TagViewerのActivityの方は android.nfc.action.TAG_DISCOVERED がついています。
タグ見つけたぜー!Intentを受ける係のActivityっぽいですね。多分これがメインターゲットのActivityです。
その他<uses-feature android:name="android.hardware.nfc" android:required="true" /> とかあるのでNFCを触るにはこれが必要っぽいですね。 (12月28日追記) これ特に無くても動くそうです。@yanzmさんに教えていただきました! 先生のYanzmingActionにはいつもお世話になっています!┌○ NFCがオマケ機能的にサポートされているアプリの場合、ない方がよいのですね…。uses-featureってそういうものだったんだ…。
TagViewer.javaFelicaやおサイフケータイを近づけてみると、L70の
でnullが返ってきてしまっているみたいですね…。
(12月28日修正) 下記コードで普通にID取れました…。折角搭載されているのに脳味噌をちゃんと使わなかった結果ですごめんなさい。
intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
まとめおサイフケータイを @eaglesakura に借りて試してみたけど、同じ結果で終わってしまいました…。
@hide が指定されて僕達からは見えなくなっているあたりにはRead/Writeの口や近傍のNFCとコネクションを確立するための口があるような気がしないでもないのですが…。うーん。
NFCのR/Wをする機材もしゃちょーが注文してくれたので、年明けにそれを使って再チャレンジの予定。
また何かわかったら書けるように頑張ります!記事の内容が間違ってる!とかこういうのあるよ!という情報があったら、ぜひ教えてください :) ついった
BarAndroidにいったら進展あったよ!(12月28日追記)BarAndroidにいったら、@zaki50さんがNexusSをふにふにした結果色々発掘してくださいました!
その結果をちょっとまとめて書いておきたいと思います。
intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);上記コードでFelicaのIDmと思われる値が取れました。
このページに添付してあるTagWrapper.javaでちょびっと楽にFelicaのデータが扱えるようになるかも。まぁ雰囲気です。 Parcelable tag = intent.getParcelableExtra("android.nfc.extra.TAG");TagWrapper tw = new TagWrapper(tag);こんな感じで使います。 NfcAdapterの中身とか見るともっと色々できそうな予感…!暇を見つけてトライしていきたいところですね。 まめちしきうわーんブレークポイント設定しているのにブレークポイントで止まらないよー!!っていう人はDDMSパースペクティブをひらいて、Devicesのビューからアタッチしたいプロセスを選択してから虫ボタンとか押すといいです。
|





