0

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

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

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)中

NdefRecord cardRecord = msg.getRecords()[1];//Extract the second Record
String url_data = new String(cardRecord.getType());//Read data type

当我使用自己的应用程序(ReadNFC)阅读时,屏幕上当然只有第二条记录的有效负载,我通过“记录类型”存储了它。但是对于第三方应用程序,尤其是本机安装的(“标签”)-如图所示-,它可以正确显示第一条记录,而第二条记录是一个空字段。我怎样才能隐藏这个字段。否则,如何强制其他第三方应用程序不读取第二条记录?

在此处输入图像描述

4

3 回答 3

3

你根本无法做到这一点。Android 将读取完整的 NDEF 消息(即所有记录)并将其在 Intent 中传递给应用程序。

于 2012-12-11T11:16:30.430 回答
0

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

return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, empty, empty, payload);

然后

return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, payload, empty, empty);

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

android 中的本机 NDEF 支持有些粗糙(基于字节数组),所以我编写了一个有助于创建记录的库- 您可能会觉得这很有趣。上述问题可能很容易解决,但还有许多其他更复杂的记录类型,所以一些帮助可能会派上用场;-)

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

于 2012-12-11T13:01:23.807 回答
0

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

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);
            }

        }`

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

于 2013-03-19T09:19:45.953 回答