我在按意图写入 NFC 标签时遇到问题。我有有效的代码,可以在标签信息在附近时读取它。当我想在标签触摸到手机背面时写入标签时,我正在努力编写代码。这是我阅读部分的内容:
private void readFromIntent(Intent intent) {
String action = intent.getAction();
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)
|| NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)
|| NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage[] msgs = null;
if (rawMsgs != null) {
msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
}
}
buildTagViews(msgs);
}
}
private void buildTagViews(NdefMessage[] msgs) {
if (msgs == null || msgs.length == 0) return;
String text = "";
byte[] payload = msgs[0].getRecords()[0].getPayload();
String textEncoding = ((payload[0] & 128) == 0) ? "UTF-8" : "UTF-16"; // Get the Text Encoding
int languageCodeLength = payload[0] & 0063; // Get the Language Code, e.g. "en"
try {
text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
} catch (UnsupportedEncodingException e) {
Log.e("UnsupportedEncoding", e.toString());
}
nfc_contents.setText(getResources().getString(R.string.tag_found));
TextView textView = nfc_contents;
textView.postDelayed(new Runnable() {
@Override
public void run() {
nfc_contents.setText("");
}
}, 5000);
}
有人可以帮我吗?
我尝试使用与阅读相同的意图,但应用程序崩溃了。
书写与读取标签类似。这里我给你我的 kotlin 代码。您可以轻松地将其转换为java语言。
if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) {
val tag = intent.getParcelableExtra<Tag>(NfcAdapter.EXTRA_TAG)
val ndef = Ndef.get(tag)
if (ndef != null) {
val message = NdefMessage(
arrayOf(
NdefRecord.createMime(
"plain/text",
"my message".toByteArray(Charset.forName("US-ASCII"))
)
)
)
ndef.connect()
ndef.writeNdefMessage(message)
ndef.close()
}
}
如果您还有更多问题,请询问。我尽力帮助你。