blog画像が表示されないページは、元画像を間違えて削除してしまっているためです。データが残っていないので、想像力で補ってください。2013/12/22[nfc]HCEのサンプルを作ったようやく、HCEのサンプルを作った。https://github.com/hirokuma/HceSampleURI(スマートポスターじゃなく)のつもり。FeliCaランチャーで確認。なんでかわからないけど、FeliCaランチャーが起動していないとだめなのだ。4A全般のエミュレーションにはなっていない。Forumの仕様書を見始めたので、たぶん別物になったんじゃないだろうか。applicationの名前を行うので、そこで一致したら「NDEFアクセス中」みたいなフラグを立てるようにした。4Aのしくみをわかっていないので、そういう捌き方で良いのかはっきりしてない。動くからいいか・・・。うちではこれ以上の動作確認ができないので、ここまでかな。あと、月刊NDEFも久々に作りました。カードエミュレーション特集。http://www.slideshare.net/hiro99ma/ndef-2013-12記憶をたどりながら書いたので、あまり説明にこだわってなく、こざっぱりした感じになったんじゃないかな。大半は昨日酒を飲みながら書いているので、ちょっと心配ではあるが・・・まあ大丈夫だろう。(5)実は・・・今週のHCE記事だが、日曜日に書きためたものを4日に分けてスケジュール投稿する、ということをしてみた。5日目の今日は、12/18の2時半くらいに書いている。目がしょぼしょぼだ・・・。RC-S380を使って、Type4のまねをしているNexus7のHCE動作を見てもらおうとしたが失敗したところであった。何がいかんかというと、よくわからんバイナリを受信して、よくわからんバイナリを返している、という部分だ。バイナリデータがある限り、我々は解析をしなくてはならない。ふむ、よく聞く「T=CL」というのは通称だったんだ、とか、EFファイルってSIMカードの構造もそうだったよな、などと思い返しつつ読んでいると、まねしようとしていたNDEFメッセージの読み込みシーケンスがそのまま書いてあった。ふむふむ、スライドに書かれているバイナリ値は、直接やりとりしている値ではなく、意味があるところだけ抜き出しているのだな。そのまま送るだけではダメなのは当然だ。HACKSを参考にして、こんなプログラムにした。(これはこれで省略もあるがね。}}これをNexus7に焼いて、PaSoRiに近づけると、Windows8.1からあのNDEFタグ検知したときに聞こえるあの音がしているではないか!NDEFの中身がEmptyなので動作はしないけれども、ここにURIとか書いておけばトースト表示してくれるんじゃないだろうか。興味はあるが、今回はやめておこう。気力があるときにやらないとな。(4)さて、ちゃんとHCEの動作確認をするには、受け側がちゃんと動かないといかんだろうということはわかってきた。HACKSを読みながらがんばるしかないか・・・。考えると、うちにはWindows8.1があった。RC-S380持ってるし)。かざせば動いてくれるんじゃないか??気をよくしてつなげてみたのだが、Nexus7をかざしても、あのタグをかざしたときのような音が出ない。あ、NFPって、たしかNDEFしか反応せんやん。HCEもカードエミュレーションだから、ソフト的にNDEF値を返さないと反応しないような気がする。http://www.slideshare.net/hieroadgjmptw/hcetype4こちらを参考にしながら、同じシーケンスでアクセスしに来るという前提で、決め決めのデータを返すアプリに仕立てた。スライドのp.24で端末が返しているデータね。・・・そういうのは無謀よね。要求するデータサイズなんかも違うだろうし、受信パケットを見ずにやるってのは、さすがにだめなようだ。activatedと思って、受信したバイト列をログに出すようにしたのだけど、シーケンスと同じだった。シーケンス表の上から6行目の「(はい、これ~)」を送信しているところで、AndroidがDeactivateしている。うーん、やっぱり、意味がわかってデータを送信していないので、なぜだめなのかがわからん。(3)さて、前回はNexus7でHCEが動いているので動作が少し違うという確認をした。BeamではなくHCEが動いていると考えてよいだろう。気になるのは、画面消灯時は動作せず、ロック画面だと動作するという動きについてだ。Developerに説明がある。スクリーンがオフになったら、アプリのNFC制御は止める。HCEサービスは、ロックスクリーンでも動作できる。android:requireDeviceUnlockという属性で制御できる。デフォルトでは、デバイスのアンロックは不要でサービスは動く。requireDeviceUnlockをtrueにすると、アンロックさせないとかざしてもHCEサービスは動かず、Androidがユーザにプロンプトを出す。この動作は、私の確認した動作と一致している。画面が消灯していると、HCEサンプルを動かしていても反応しないのだ。HCEサンプルでは、requireDeviceUnlockはfalse(デフォルト値と同じ)になっている。trueだったとしても、動きは同じになるだろう。Androidがプロンプトを出すかどうかは、AIDが動いているHCEアプリたちと一致するかどうかを判断してからになるからだ。その部分まで受け側のアプリを作り込んでいないから、ダイアログが出るところを確認できない。enableReaderMode()で試すのが手っ取り早いのだろうが、手元に端末がない。それに、せっかくならPaSoRiを使っておきたいのだよ、私は。(RC-S390のSDKが一般向けに出ないかな、ぶつぶつ)。KitでNFC-Aの応答部分で捉まえるようにして、HCEサンプルを動かしたNexus7(2013)をかざしてみたが、HCEサンプルがあってもなくてもブレークポイントに止まる、という話をした。