NFCタグを使ってAndroid端末で特定のアプリを自動的に起動させる仕組みは、業務や案内システムなど、さまざまな場面で活用されています。
しかし、NFCタグに端末をかざしてもアプリが起動せず、タグの中身がそのまま表示されるだけという事象が発生することがあります。
この記事では、NFCを活用したアプリ起動がAndroidで動作しないときの原因と、その対処方法を技術的な視点から詳しく解説します。
よくある状況
- NFCタグに設定したリンクやMIMEタイプは正しく見える
- タグ読み取り自体は成功している
- 表示された内容はリンク形式だが、アプリが起動しない
- 他の端末(例:iOS)では正しく動作している
主な原因
MIMEタイプとインテントフィルタの不一致
Androidでは、NFCタグに記録されたデータの種類(MIMEタイプ)と、アプリが受け取れるデータの種類が一致していなければ、アプリは起動しません。
たとえば、タグ側に「application/独自タイプ」というMIMEタイプが設定されている場合、アプリ側でも以下のような定義が必要です。
1 2 3 4 5 |
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/独自タイプ" /> </intent-filter> |
この定義が不足している、あるいは一致していない場合、アプリは起動せず、タグの中身が画面に表示されるだけになります。
NFCタグの内容がAndroidの仕様に適合していない
Androidでは、タグの内容がNDEF形式で記録されている必要があります。また、記述されているURIやMIMEタイプが、Androidで扱える形式になっていなければなりません。
具体的には、以下の形式が推奨されます。
- MIMEタイプ:application/任意の識別子
- URI:アプリに関連付けられたスキーム(例: myapp://example.com/page)
タグ書き込み時に汎用的な形式(例:text/plain)を使用すると、Androidでは標準のブラウザやビューアで開かれてしまい、アプリの起動には繋がりません。
Androidの仕様変更
Android 12以降では、セキュリティ強化の一環として、タグ起動に関する制限が追加されました。
その影響で、これまで起動していたアプリがタグから起動できなくなったというケースがあります。
特に、次のような動作制限が影響します。
- アプリがバックグラウンドにあると起動しない
- タグにアプリ名情報(AAR)が含まれていないと優先されない
解決方法
タグの内容を再確認・再設定
NFCツールアプリ(例:「NFC Tools」など)を用いて、以下のようにタグを書き込み直してください。
- データ形式:NDEF
- MIMEタイプ:application/任意の識別子
- URI:スキーム付きのリンク(例: myapp://path)
アプリと連携させるには、「アプリ名情報(AAR)」を含めることで、対象のアプリがインストールされている場合に優先して起動されるようになります。
アプリの受信設定を見直す
AndroidManifest.xmlに以下のような記述があるか確認しましょう。
1 2 3 4 5 6 7 |
<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/任意の識別子" /> </intent-filter> </activity> |
また、URIスキームに対応させる場合は、以下のような設定も追加します。
1 2 3 4 5 6 |
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="myapp" /> </intent-filter> |
このように、MIMEタイプとURIスキームの両方に対応させることで、アプリの起動率を高められます。
ログによる動作確認
Android Studioのログ出力(Logcat)を確認することで、NFCタグ読み取り時のアクションを追跡できます。
以下のような出力がされる場合、正しくインテントが発火しています。
1 |
I/ActivityManager: START u0 {act=android.nfc.action.NDEF_DISCOVERED ... |
逆に、TAG_DISCOVERED
のみが出ている場合、インテントの一致条件を満たしていない可能性があります。
まとめ
NFCタグを使ってAndroidアプリを起動させる仕組みは便利ですが、タグの形式やアプリの設定が少しでもずれていると、アプリが起動せず、タグの情報が表示されるだけになってしまいます。
今回ご紹介したように、以下のポイントを丁寧に確認することが重要です。
- タグの形式はNDEFで、MIMEタイプとURIを適切に設定する
- アプリ側はインテントフィルタで該当の形式に対応しておく
- Androidの仕様変更に注意し、必要に応じてAARなどの情報をタグに追加する
端末や環境によって細かい挙動が異なることもあるため、実機での検証とログ確認を併用しながら、正しい動作を実現してください。
コメント