2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Android] NFCタッチからアプリ起動と同時にタグを読み込む

Posted at

やりたいこと

以下の記事で NFC タグをタッチしてアプリを起動するところまでできました。
[iOS][Android] NFCタグを使ってスマホアプリを起動する
次に、起動時にそのままタグを読み込みたいと思います。

事前準備

[iOS][Android] NFCタグを使ってスマホアプリを起動するを参照してください。
ホーム画面でNFCタッチすると、アプリが起動するまでの動作を行います。

起動時にタグ情報を読み込む対応

起動する ActivityのonCreate()で Intent を受け取り処理します。
NFC に書かれている Data(MIME) と AndroidManifest.xml の intent-filter が一致することで、アプリ起動時に ACTION_NDEF_DISCOVERED アクションを伴いActivityが起動されます。

MainActivity.kt
    private var nfcAdapter: NfcAdapter? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // NFC に書かれている Data(MIME) と AndroidManifest.xml の intent-filter が
        // 一致することで、アプリ起動時に ACTION_NDEF_DISCOVERED アクションとなる
        if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) {
            // NDEF タグメッセージを取得する
            intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)?.also { rawMessages ->
                val messages: List<NdefMessage> = rawMessages.map { it as NdefMessage }
                // メッセージから各レコードの情報を取得する
                for (num in 0..(rawMessages.size-1)) {
                    (rawMessages[num] as NdefMessage).apply {
                        // 例として、Payload を読み込んでみる
                        records.forEach { ndefRecord ->
                            println( String(ndefRecord.payload))
                        }
                    }
                }
            }
        }
    }

Activityの launchMode が singleTop でない場合は onCreate() が呼ばれないこともあるので、その場合は onNewIntent()あたりでIntentを受け取ると良いようです。

実現できたこと

対象のアプリが前面にない場合に、NFCタグにAndroid端末をタッチすることで、アプリを起動。
その際にAndroidシステムが読み込んだタグの情報を、アプリが読み込む。
(起動後にNFCタグから離して、再タッチする必要がない)

後記

上記では、MIMEタイプのNDEFレコードを対象にしていましたが、NFCの基本 に書かれているように、他のタイプのレコードも対象とでき、その時にフォールバックされるアクションも3種類あります。
正直なところ、いくつかのパターンを試してみましたが、intent-filterの書き方が悪いのか、うまくいきませんでした。。。そのうち、気が向いたらまたチャレンジしてみたいと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?