AndroidとNFCタグのある日常
ここは香川県にある、とあるオフィス。
「あ、もうこんな時間かー。」
「そろそろお昼ご飯にでも行くか。・・・そうだ、せっかくだから最新のおしゃれなランチスポットを探してみよう!Nexus7を、このNFCタグの上にかざして、と。」
ポポーン♪
「お、出てきた出てきた。・・・あれあれー?、香川県のおしゃれなランチスポットを検索したのに、ほとんどうどん屋だぞー。おかしいなー。・・・ま、いいか、今日もうどんとちくわ天にするか!」
・・・みなさんこんにちは。うどん県在住の中山です。
食べログで、香川県のランチランキングを見ると、本当にほとんどがうどん屋さんなので、今日もしかたなくうどんを食べています。
今回は、上でご紹介したような、Androidスマートフォン・タブレットに搭載されている「NFC」の機能を使って、
という操作を、「できるだけ簡単に」実現してみようと思います。
意外と複雑(?)なNFCの規格
しかし、正直に申し上げますと、私は、NFC機能の実装に関して、けっこうナメていました。
実は、NFCの規格というのはどちらかというと複雑で、本気で実装しようとすると、いろいろと考慮すべき部分が出てくることになるのです。
AndroidとNFCに関しては、以下の記事が本当に詳しく、役に立ちます。
と言いますか、今回の私の記事の中の技術的な要素に関しては、上記のサイトを全面的に参考にさせてもらいました。(本当にありがとうございます。)
というわけで、この記事では、
「難しい話は、少し後回しにさせてもらって、まずは動くものを手軽に体験してみようじゃないか」
というコンセプトで、ひとつ紹介してみようと思います。
この記事で、NFC機能の感触をつかんでもらったところで、もっといろいろとNFCの機能を使ってみたい!という方については、前述の
の記事をご覧になるとよいと思います。
必要なもの
今回は以下を利用しました。
Androidタブレット: Nexus7(2012 OS4.4)
- 出版社/メーカー: Asustek
- 発売日: 2013/09/20
- メディア: Personal Computers
- 購入: 3人 クリック: 30回
- この商品を含むブログ (42件) を見る
NFCタグ: SMARTRAC NFC Tag(Micro Solution Inc.)
SMARTRAC NFC Tag (NTAG203 WPP60 ( Circus ) 20p)
- 出版社/メーカー: マイクロソリューション Micro Solution Inc.
- メディア: エレクトロニクス
- この商品を含むブログを見る
サンプルプログラム
今回作成したのは、「NFCタグにデータを書き込む」ほうのアプリだけです。
「NFCタグを読み取って、ウェブサイトにアクセスする」ほうは、Androidスマートフォン・タブレットを、データ書き込み済みのNFCタグにかざすだけで、OSが自動的にウェブサイトの表示までおこなってくれます。
「NFCタグにデータを書き込む」サンプルアプリ「MyNFCWriter」は、こちらから取得できます。
以下、順をおって、プログラムの中身を見ていきます。
AndroidManifest.xmlの設定
AndroidManifest.xmlには、以下のように「NFC」機能を利用するための設定を追加します。(ファイル全体は、こちらを参照してください。)
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.co.iti.mynfcwriter" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <!-- NFC機能を利用するためのパーミッション設定を追加します --> <uses-permission android:name="android.permission.NFC" /> <!-- NFC機能を持つ端末だけに、当アプリをインストールできるようにします --> <uses-feature android:name="android.hardware.nfc" android:required="true" /> <application android:allowBackup="true" ・・・
Activityの実装
メインActivityは以下のように実装しています。
このサンプルアプリを起動して、NFCタグにかざすと、「onNewIntent」が呼び出され、その中で、タグへのデータ書き込み処理が行われます。
(ファイル全体は、こちらを参照してください。)
public class MainActivity extends Activity { // NFCタグに書き込むURL文字列 // ここでは例として、「食べログ」サイトの「香川県 ランチランキング」ページの // URLを指定しています // このTARGET_URL定数に指定するURL文字列を変えることで、お好きなウェブサイトを // 表示することができるようになります private static final String TARGET_URL = "http://bit.ly/1cBnsuk"; // 独自に作成した、NFCタグ書き込み用クラスのインスタンス private NfcWriter nfcWriter = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // NFCタグ書き込み用クラスのインスタンスを生成します this.nfcWriter = new NfcWriter(this); } @Override protected void onResume() { super.onResume(); PendingIntent pendingIntent = this.createPendingIntent(); // NFCタグ書き込み用クラスの機能を有効化します // (NFCタグがかざされると、onNewIntentが呼び出されるようにします) this.nfcWriter.enable(this, pendingIntent); } @Override protected void onPause() { super.onPause(); // NFCタグ書き込み用クラスの機能を無効化します this.nfcWriter.disable(this); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); // NFCタグがかざされた際に起動し、指定されたURL文字列をそのタグに書き込みます // (書き込みに成功すると、"Completed." というメッセージが表示されます) if (this.nfcWriter.write(this, intent, TARGET_URL)) { Toast.makeText(this, "Completed.", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, this.nfcWriter.getErrorMessage(), Toast.LENGTH_SHORT).show(); } } ・・・
NFCタグ書き込み用クラス「NfcWriter」
NFCタグへのデータ書き込み機能を提供するクラスを作成します。
実装内容については、「AndroidによるNFCスマートポスタータグの作成」サイトに記載されている内容を、ほぼそのまま利用させてもらっています。
ファイルの全体は、こちらを参照してください。
実践
敷居は低いが奥も深い
とりあえずタグを読み取ってウェブサイトを表示するだけであれば、とても簡単に実現することができました。
本当は、いろいろと考慮すべき部分は多々あるようなのですが、今回のように、
「URL書き込み」→「ウェブサイト表示」
といった、定型的なフォーマットであれば、とても簡単に実装することができました。
しかしNFC機能を用いてできることは、もちろんこれだけではありません。
今後も、NFCの可能性をどんどん探っていこうと思っています。
追記:
新たに「たったこれだけ!AndroidからNFCタグにデータを書き込む!その2」という記事も掲載しました。
こちらでは、さらにいろいろなNFCタグからのアプリ起動パターンを試しています。合わせてご覧ください。