2012/12/02

[nfp]NDEFカードを検出するだけのアプリ

どうにかこうにか、Windows8のストアアプリでNDEFカードを検出するだけのアプリができた。

https://github.com/hirokuma/Win8_NdefDetect

「だけ」というのは、中身を解析しないからだ。
そこら辺はOSが提供してくれず、自分で解析せんといかんようだ。
NDEF用ライブラリもNuGetにはあるみたいだが、試してない。


まず、NFP対応アプリを作るためには、Package.appxmanifestへの設定が必要だ。
ダブルクリックして開き、タブ「機能」を選択し、「近接」にチェックを入れる。
(GitHubに置いたものはToastを使うので、タブ「アプリケーションUI」でToastの対応も有効にしておく。)

Toastを使うので、NuGetからNotificationsExtensions.WinRTをインストールしている。

それ以外は、MainPage.xaml.csしか変更していない。
背景が黒いと憂鬱になるので、そこだけMainPage.xamlを変更したくらいだ。

 

MainPage.xaml.csのポイントをいくつか。

コンストラクタ

ここでWindows.Networking.Proximity.ProximityDeviceを取得している。

 

OnNavigatedTo()

よくわからんが、アプリが立ち上がったときに呼ばれるような気がする(調べてない)。
ここに、デバイス検出やメッセージ受信で呼び出されるコールバック関数を登録している。

DeviceArrivedは検出、DeviceDepartedはデバイスの離脱のようだ。
アップしたソースではコメントアウトしているが、これはうっとうしいからそうしているだけだ。

メッセージ受信、というのは、NDEFカードを読んだときに呼び出されるようだ。
NFPは元々、NDEFではなくWindowsのネームスペース検出を目的にできているのか、あんまり親切じゃない。
SubscribeForMessage()の第1引数が検出対象のネームスペース(プロトコル?)で、第2引数がコールバック関数。
NDEFのメッセージだから”NDEF”でいいかと思ったが、そうではなかった。
”NDEF:wkt.T”のように、1つ1つ指定せんといかんみたい。
その代わりといってはなんだが、複数呼び出せば追加で登録できるようだ。


私の興味としては、NFP APIだけでまっさらなNFCカードをNDEFフォーマットできるのか、ということなのだが、まだよくわからない。

カード検出してもしなくても書き込みができるのかな?
そしてバイナリデータを書くことができるのならできるのかもしれない。

が、Type2だから・・・とかType3だから・・・というような識別ができないんだったら、フォーマットはできないように思う。

そう考えると、NFPはカードアクセスよりも、デバイス間の通信に主眼を置いていると考えた方がいいのかね。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。