こんにちは。中山です。
以前の「たったこれだけ!AndroidからNFCタグにデータを書き込む!」の記事では、ブラウザを起動して、指定のウェブページを表示するためのデータを、NFCタグに書き込む方法をご紹介しました。
今回は、その続編として、NFCタグを読み取って、ブラウザ以外の、いろいろなアプリを起動させるためのデータ書き込み方法を、いくつか紹介してみたいと思います。
1.サンプルアプリケーション
今回も、サンプルのAndroidアプリケーション「MyNFCWriter2」をGitHubに置きました。
このアプリケーションを実行すると、以下のような画面が表示されます。
例えば、NFCタグを読み取って、Googleマップアプリを起動させたい場合、上記のように「Googleマップアプリを起動する」をチェックした状態で、そのAndroidスマートフォン、またはタブレットをNFCタグにかざします。
NFCタグへの書き込みが正しく完了すると、以下のように「Completed.」と表示されるでしょう。
書き込みが完了したNFCタグに、Androidスマートフォン、またはタブレットをかざします。(サンプルアプリ「MyNFCWriter2」は終了させておきます。)
正しくNFCタグのデータが読み取れますと、以下のように、Googleマップアプリが起動します。(今回のサンプルでは、東京駅付近を表示するようにしています。)
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タグ読み取り側で特別なアプリを必要としないパターンは、より広く使ってもらえる、という観点からすると、望ましい形なのかなぁと思いました。
AndroidがNFCを搭載するようになってからけっこうたちますが、正直、活発に利用されている、とは言いがたい状況だと私は感じています。
しかし、iOSが「iBeacon」で、近距離通信の機能をいろいろ活用しようとしている現在、NFCも、なにかブレークスルーが期待できるはずだ、と信じて、私自身もアイデアを練っていきたいと思います。