簡體   English   中英

將NDEF記錄隱藏到NDEF消息中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM