赞
踩
在Android NFC开发之读取NDEF格式数据这篇文章中我们介绍了如何写入读取NDEF格式的数据
在如下代码中有时候用其他一些NFC标签会抛出NullPointerException异常,Ndef.get方法返回null
- @Override
- public void onNewIntent(Intent intent) {
- //1.获取Tag对象
- Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
- //2.获取Ndef的实例
- Ndef ndef = Ndef.get(detectedTag);
- mTagText = "type:" + ndef.getType();
- mTagText += "\nmaxsize:" + ndef.getMaxSize() + "bytes";
- readNfcTag(intent);
- mContent.setText(mTagText);
- }
经排查发现测试的NFC标签有的不是NDEF格式的,而是NdefFormatable,可以用Tag对象的toString方法打印出来看看
像我测试的这款标签包含两种格式,NfcV和NdefFormatable,而NdefFormatable和Ndef是不一样的
但是NdefFormatable支持格式化成Ndef格式,Android SDK提供了相应的格式化api
TAG: Tech [android.nfc.tech.NfcV, android.nfc.tech.NdefFormatable]
所以在通过Ndef.get方法获取到Ndef对象后还需判断是否为空再进行读写操作
- @Override
- public void onNewIntent(Intent intent) {
- //1.获取Tag对象
- Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
- //2.获取Ndef的实例
- Ndef ndef = Ndef.get(detectedTag);
- if(ndef != null) {
- mTagText = "type:" + ndef.getType();
- mTagText += "\nmaxsize:" + ndef.getMaxSize() + "bytes";
- readNfcTag(intent);
- mContent.setText(mTagText);
- }
- }
写入数据的时候也要先判断是什么格式,若是Ndef格式可以直接写入数据,若是NdefFormatable数据,则需先执行格式化操作
原来写入的代码如下
- public static boolean writeTag(NdefMessage ndefMessage, Tag tag) {
- try {
- Ndef ndef = Ndef.get(tag);
- ndef.connect();
- ndef.writeNdefMessage(ndefMessage);
- return true;
- } catch (Exception e) {
- }
- return false;
- }
修改后如下所示
- public static boolean writeTag(NdefMessage ndefMessage, Tag tag) {
- Ndef ndef = Ndef.get(tag);
- NdefFormatable ndefFormatable = NdefFormatable.get(tag);
- try {
- if (ndef != null) {
- ndef.connect();
- ndef.writeNdefMessage(ndefMessage);
- return true;
- } else if(ndefFormatable != null) {
- ndefFormatable.connect();
- ndefFormatable.format(ndefMessage);
- return true;
- }
- } catch (IOException e) {
- e.printStackTrace();
- } catch (FormatException e) {
- e.printStackTrace();
- }
- return false;
- }
NdefFormatable格式标签经格式化后会变成Ndef格式,可以通过tag.toString输出看下,可以看到原来的标签已变成Ndef格式
TAG: Tech [android.nfc.tech.NfcV, android.nfc.tech.Ndef]
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。