Intelligent Technology's Technical Blog

株式会社インテリジェントテクノロジーの技術情報ブログです。

たったこれだけ!AndroidからNFCタグにデータを書き込む!その2

こんにちは。中山です。

以前の「たったこれだけ!AndroidからNFCタグにデータを書き込む!」の記事では、ブラウザを起動して、指定のウェブページを表示するためのデータを、NFCタグに書き込む方法をご紹介しました。

今回は、その続編として、NFCタグを読み取って、ブラウザ以外の、いろいろなアプリを起動させるためのデータ書き込み方法を、いくつか紹介してみたいと思います。

1.サンプルアプリケーション

今回も、サンプルのAndroidアプリケーション「MyNFCWriter2」をGitHubに置きました。
このアプリケーションを実行すると、以下のような画面が表示されます。

f:id:IntelligentTechnology:20140507110600p:plain:w360

例えば、NFCタグを読み取って、Googleマップアプリを起動させたい場合、上記のように「Googleマップアプリを起動する」をチェックした状態で、そのAndroidスマートフォン、またはタブレットNFCタグにかざします。

NFCタグへの書き込みが正しく完了すると、以下のように「Completed.」と表示されるでしょう。

f:id:IntelligentTechnology:20140507110950p:plain:w360

書き込みが完了したNFCタグに、Androidスマートフォン、またはタブレットをかざします。(サンプルアプリ「MyNFCWriter2」は終了させておきます。)

正しくNFCタグのデータが読み取れますと、以下のように、Googleマップアプリが起動します。(今回のサンプルでは、東京駅付近を表示するようにしています。)

f:id:IntelligentTechnology:20140507111745p:plain:w280

2.仕組み

この機能を実現する仕組みは、本当に単純なものです。
前回NFCタグからウェブページを表示させるために

http://bit.ly/1cBnsuk

というURLをNFCタグに書き込みました。
いっぽう今回は、この書き込むURLを、

geo:35.6703915,139.7758437

に変えるだけで、NFCタグからGoogleマップアプリを起動できるようになりました。

具体的には、「MyNFCWriter2」サンプルアプリの中の「MainActivity」クラスの、以下の部分、

@Override
protected void onNewIntent(Intent intent) {
 super.onNewIntent(intent);

 // this.targetUrl フィールドの値を切り替えることで、
 // いろいろなアプリ起動パターンに対応できる
 if (this.nfcWriter.write(this, intent, this.targetUrl)) {
  Toast.makeText(this, "Completed.", Toast.LENGTH_SHORT).show();
 } else {
  Toast.makeText(this, this.nfcWriter.getErrorMessage(), Toast.LENGTH_SHORT).show();
 }
}

「write」メソッドに渡す「this.targetUrl」フィールドの値を切り替えることで、いろいろなアプリの起動に対応させています。(詳細につきましては、「MainActivity」クラスのソースをご覧ください。)

今回のサンプルアプリで指定できるパターンは、以下のとおりです。

アプリ画面上の選択肢 書き込まれるURL 備考
ウェブサイトを表示する http://bit.ly/1cBnsuk 香川県のランチランキングのページを表示)
電話をかける tel:09000000000  
SMSを送る sms:09000000000  
メールを送る xxx@xxx.com  
Googleマップアプリを起動する geo:35.6703915,139.7758437 (東京駅付近の地図を表示)
Youtubeアプリを起動する vnd.youtube://sGF6bOi1NfA (パンダ動画を再生)
LINEアプリを起動する http://line.me/R/msg/text/?somemessage (トーク送信画面を表示)

3.まとめ

NFCタグに書き込むURLのパターンだけで、ブラウザだけではなく、いろいろなアプリの起動に対応できることがわかりました。
しかし、例えば、

  • カメラを起動する
  • 設定画面をひらく

などの操作を、NFCタグの読み取りから実行しようとすると、このようなURLの指定だけでは実現することができません。
NFCタグのデータ読み取りに加えて、そのデータを読み取ったあとの処理をハンドリングする、専用のアプリが必要となります。(ACTION_NDEF_DISCOVEREDなどのIntentアクションを受けつけるアプリが必要となります。この詳細については、また別の機会にでも。)

しかしながら、不特定多数のユーザを想定する場合、
NFCタグ読み取りのために、専用のアプリを入れてないといけませんよ」
というのは、ちょっとひと手間かかってしまうので、場合によっては、よいやりかたとはならないかもしれません。

いっぽう、今回のように、URLで指定できる範囲だけにはなるものの、NFCタグ読み取り側で特別なアプリを必要としないパターンは、より広く使ってもらえる、という観点からすると、望ましい形なのかなぁと思いました。

AndroidNFCを搭載するようになってからけっこうたちますが、正直、活発に利用されている、とは言いがたい状況だと私は感じています。
しかし、iOSが「iBeacon」で、近距離通信の機能をいろいろ活用しようとしている現在、NFCも、なにかブレークスルーが期待できるはずだ、と信じて、私自身もアイデアを練っていきたいと思います。