AndroidでNfcAdapterのコールバックの中でNDEFを読み取りたい!
概要
今回の記事では、NfcAdapterのコールバックの中でNDEFを読み取る手順を掲載する。
「特定のNDEFが書き込まれたNFCを読み込んだ際に起動されるアプリでNDEFを読み取るケース」と「アプリ稼働中に書き込まれたNFCからNDEFを読み取るケース」があるんだけども、今回の記事は後者の「アプリ稼働中に書き込まれたNFCからNDEFを読み取るケース」の内容になる。
仕様書
環境
- Android Studio Chipmunk 2021.2.1 Patch 2
- Java 1.8(8)
手順書
Activity
のonCreate
の中などで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月時点)
リンク