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