NFC读取标签短信服务

时间:2015-05-02 05:26:37

标签: android sms uri nfc ndef

我编写了一个程序,我正在尝试编写和读取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);   

    }
}

1 个答案:

答案 0 :(得分:0)

Android显示无法识别的NFC论坛外部类型nfclab.com:smsService(请注意,只有小写字母应用于外部类型名称,请参阅my answer here),因为您在记录中存储了该记录类型。该类型是由nfclab.com创建的自定义类型(对于他们的书中的相当人为的例子,如果没有自定义的阅读器应用程序将无法工作),并且绝不是标准化的。因此,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。