[英]Hide an NDEF record into the NDEF Message?
我已經開發了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)進行讀取時,我當然只有第二條記錄的有效負載在屏幕上,該記錄是通過“記錄類型”存儲的。 但是對於第三方應用程序,尤其是本地安裝的(“標簽”)(如照片所示),它可以正確顯示第一個記錄,而第二個記錄則為空字段。 如何隱藏此字段。 否則,如何強制其他第三方應用程序不讀取第二條記錄?
您根本無法做到這一點。 Android將讀取完整的NDEF消息(即所有記錄),並將其在Intent中傳遞給應用程序。
Upps,難怪這正在發生,請看一下您的代碼。 第一
return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, empty, empty, payload);
然后
return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, payload, empty, empty);
因此,第三方應用程序確實顯示了正確的數據,您在創建記錄時遇到了錯誤。
android中對本機NDEF的支持有些粗糙(基於字節數組),因此我編寫了一個有助於創建記錄的庫 -您可能會覺得有趣。 上面的問題可能很容易解決,但是還有許多其他更復雜的記錄類型,因此一些幫助可能會派上用場;-)
編輯:因此,如果這是首選結果,則創建一個未知記錄並將您的“秘密”數據作為有效負載-這對於任何第三方應用程序來說都不是顯示該數據的好方法-而絕對URI的ID記錄肯定可以通過任何NDEF閱讀應用程序顯示(例如我的 ?)
這個第三方應用程序對我來說很麻煩,因此我不得不使用frontenDispatch手動讀取標簽內容,您可以自由讀取或不讀取所需的任何內容。 該摘錄來自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);
}
}`
在這里,我得到第一條記錄的有效載荷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.