NFC读卡器获取错误android

时间:2015-10-27 13:55:56

标签: android nfc

尝试使用此功能读取NFC卡

if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
        if ("text/plain".equals(type)) {
            Parcelable[] rawMsgs = intent.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];
                }
                NdefMessage msg = msgs[0];
                try {
                    byte[] payload = msg.getRecords()[0].getPayload();
                    String textEncoding = ((payload[0] & 0200) == 0) ? String.valueOf(R.string.utf_8) : String.valueOf(R.string.utf_16);
                    int languageCodeLength = payload[0] & 0077;
                    String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");
                    Log.d("reader", "Language code:" + languageCode);
                    //Get the Text
                    String text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
                    textViewLastResult.setText(text);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } else {
            //textViewLastResult.setText("Wrong mime type: " + type);
        }
    }

我收到了错误 -

String text = new String(payload,languageCodeLength + 1,payload.length - languageCodeLength - 1,textEncoding);

  

W / System.err:java.io.UnsupportedEncodingException:2131099684   10-27 21:41:52.606 7804-7804 / com.geniuslead.attendance W / System.err:at java.nio.charset.Charset.forNameUEE(Charset.java:316)   10-27 21:41:52.606 7804-7804 / com.geniuslead.attendance W / System.err:at java.lang.String。(String.java:223)   10-27 21:41:52.606 7804-7804 / com.geniuslead.attendance W / System.err:at com.geniuslead.attendance.ui.ReadCardActivity.resolveIntent(ReadCardActivity.java:198)

2 个答案:

答案 0 :(得分:1)

如果我理解得很好,你可以从字符串资源中获取编码。相反,尝试使用这样的东西(取决于版本):

String text = "";
    if ((payload[0] & 0200) == 0)  text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, StandardCharsets.UTF_8);
    else text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, StandardCharsets.UTF_16);

答案 1 :(得分:1)

我的错误是String.valueOf(R.string.utf_8)给了一些不。可能是字符串ID。我硬编码“UTF-8”现在它正在工作..