首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否在NDEF消息中隐藏NDEF记录?

是否在NDEF消息中隐藏NDEF记录?
EN

Stack Overflow用户
提问于 2012-12-11 17:43:21
回答 3查看 698关注 0票数 0

我已经开发了2个Android应用程序。第一个是写入NFC标签,第二个是读取我已经写入的内容。

这是我在第一个应用程序(WriteNFC)中所做的

代码语言:javascript
复制
private NdefRecord createRecord1(String data)
{ 
byte[] payload = data.getBytes(Charset.forName("UTF-8"));
byte[] empty = new byte[] {};
return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, empty, empty, payload);
}
private NdefRecord createRecord2(String data)
{ 
byte[] payload = data.getBytes(Charset.forName("UTF-8"));
byte[] empty = new byte[] {};
return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, payload, empty, empty);
}

在第二个应用程序(ReadNFC)中

代码语言:javascript
复制
NdefRecord cardRecord = msg.getRecords()[1];//Extract the second Record
String url_data = new String(cardRecord.getType());//Read data type

当我使用我自己的应用程序(ReadNFC)阅读时,我的屏幕上当然只有第二条记录的有效载荷,它是我通过“记录类型”存储的。但是对于第三方应用程序,特别是照片中本地安装的(“标签”) -shown,它会正确显示第一条记录,而第二条记录是一个空字段。如何隐藏此字段。否则,如何强制其他第三方应用程序不读取第二条记录?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-11 19:16:30

你根本不能这样做。Android将读取完整的NDEF消息(即所有记录),并在意图中将其传递给应用程序。

票数 3
EN

Stack Overflow用户

发布于 2012-12-11 21:01:24

Upps,难怪会发生这种情况,看看你的代码吧。第一

代码语言:javascript
复制
return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, empty, empty, payload);

然后

代码语言:javascript
复制
return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, payload, empty, empty);

因此,第三方应用程序确实显示了正确的数据,您的记录创建过程中存在错误。

android中的原生NDEF支持有些粗糙(基于字节数组),所以我写了一个library,它可以帮助创建记录--你可能会感兴趣。上面的问题可能很容易解决,但还有许多其他复杂得多的记录类型,因此一些帮助可能会派上用场;-)

编辑:因此,如果这是首选结果,不如创建一个未知的记录,并将您的“秘密”数据作为有效负载-这将不是任何第三方应用程序显示该数据的好方法-而绝对URI记录的ID肯定可以由任何读取NDEF的应用程序(如mine?)显示。

票数 0
EN

Stack Overflow用户

发布于 2013-03-19 17:19:46

这个第三方应用程序让我很烦,所以我不得不使用foregroundDispatch来手动读取标签内容,在那里你可以自由地阅读或不阅读任何你想要的东西。这段代码来自OnResume()。`

代码语言:javascript
复制
mNfcAdapter.enableForegroundDispatch(this, pendingIntent,
                intentFiltersArray, techListsArray);

            Toast.makeText(getApplicationContext(), "TAG disscovered",
                    Toast.LENGTH_LONG).show();
            Parcelable[] rawMsgs = getIntent()
            .getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

            if (rawMsgs != null) {
                NdefMessage[] msgs = new NdefMessage[rawMsgs.length];


                for (int i = 0; i < rawMsgs.length; i++) {

                    msgs[i] = (NdefMessage) rawMsgs[i];
                    setText=new String(msgs[i].getRecords()[0].getPayload());
                }
                mInfoText.setText(setText);
            }

        }`

这里我得到了第一个记录的有效载荷。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13817462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档