【Android】NfcAdapterのコールバックの中でNDEFを読み取る【NFC】

ネコニウム研究所

PCを利用したモノづくりに関連する情報を掲載するブログ

【Android】NfcAdapterのコールバックの中でNDEFを読み取る【NFC】

2022-9-26 | , ,

AndroidでNfcAdapterのコールバックの中でNDEFを読み取りたい!

概要

今回の記事では、NfcAdapterのコールバックの中でNDEFを読み取る手順を掲載する。

「特定のNDEFが書き込まれたNFCを読み込んだ際に起動されるアプリでNDEFを読み取るケース」「アプリ稼働中に書き込まれたNFCからNDEFを読み取るケース」があるんだけども、今回の記事は後者の「アプリ稼働中に書き込まれたNFCからNDEFを読み取るケース」の内容になる。

仕様書

環境

  • Android Studio Chipmunk 2021.2.1 Patch 2
  • Java 1.8(8)

手順書

ActivityonCreateの中などでNfcAdapterをインスタンス化しつつ、コールバック用のクラスを設定したりしつつ。下記は例です。

    NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
    nfcAdapter.enableReaderMode(MainActivity.this, new NfcReaderCallback(), NfcAdapter.FLAG_READER_NFC_F | NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_NFC_B | NfcAdapter.FLAG_READER_NFC_V, null);

コールバック用のクラス。
NDEFに接続して「ID」「Payload」「MimeType」を取得するサンプル。

    private class NfcReaderCallback implements NfcAdapter.ReaderCallback
    {
        @Override
        public void onTagDiscovered(Tag tag)
        {
            Ndef ndef = Ndef.get(tag);

            try
            {
                ndef.connect();

                NdefMessage ndefMessage = ndef.getNdefMessage();
                NdefRecord ndefRecords[] = ndefMessage.getRecords();

                for (int i = 0; i < ndefRecords.length;i++)
                {
                    Log.d("NdefRecords[" + i + "]", "getId: " + new String(ndefRecords[i].getId()));
                    Log.d("NdefRecords[" + i + "]", "getPayload: " + new String(ndefRecords[i].getPayload()));
                    Log.d("NdefRecords[" + i + "]", "toMimeType: " +  ndefRecords[i].toMimeType());
                    }
                    ndef.close();
                } catch (Exception e) {
                    Log.d("NFC Exception", e.getMessage());
                }
        }

まとめ(感想文)

NFCをごにょごにょしたい時に使えるかもね!

PR

テスト用に使ってるNFCラベル。
安いけど問題なし!オススメ!!
50枚入り。1枚40円。(2022年9月時点)