被发现时写入 NFC 标签(有意)

问题描述 投票:0回答:1

我在按意图写入 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); 
}

有人可以帮我吗?

我尝试使用与阅读相同的意图,但应用程序崩溃了。

java android nfc
1个回答
0
投票

书写与读取标签类似。这里我给你我的 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()
        }
    }

如果您还有更多问题,请询问。我尽力帮助你。

© www.soinside.com 2019 - 2024. All rights reserved.