【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月時点)