NFC 读取标签短信服务

NFC Read Tag SMS Service

我编写了一个程序,我试图在其中写入和读取 NFC 标签,这可能有助于用户发送消息。我已成功写入标签,但每当我尝试阅读时,标签应用程序都会显示 vnd.android.nfc://ext/nfclab.com:smsService 但不允许我发送消息。

WriteSmsActivity.java:

    @Override
    public void onNewIntent(Intent intent) {
        Log.i("Foreground dispatch", "Discovered tag with intent: " + intent);
        Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);  
        String externalType = "nfclab.com:smsService";
        String smsNumber = smsNumberEditText.getText().toString();
        String smsBody = smsBodyEditText.getText().toString();
        String urlAddress = "sms:"+smsNumber+"?body="+smsBody;
        NdefRecord extRecord = new NdefRecord(NdefRecord.TNF_EXTERNAL_TYPE, externalType.getBytes(), new byte[0], urlAddress.getBytes());
        NdefMessage newMessage = new NdefMessage(new NdefRecord[] { extRecord});
        writeNdefMessageToTag(newMessage, tag);   

    }
}

Android 显示无法识别的 NFC 论坛外部类型 nfclab.com:smsService(请注意,外部类型名称只能使用小写字母,请参阅 my answer here),因为您存储了标签上的记录类型。该类型是由 nfclab.com 创建的自定义类型(对于他们书中相当人工的示例,如果没有自定义的 reader 应用程序将无法工作)并且绝不是标准化的。因此,Android 不知道应该如何处理该记录。

在 NFC 标签上存储现成的 SMS 消息的标准方法是 sms: URI 方案。因此,您通常会创建一个包含您的短信的 URI 记录:URI:

String smsUri = "sms:" + phone_number + "?body=" + text_message;
NdefRecord smsUriRecord = NdefRecord.createUri(smsUri);

自 Android 4.1(或左右)起,此类记录应由 Android 自动处理,并允许您在默认短信应用程序中打开短信:URI。