【发布时间】:2012-11-09 20:59:17
【问题描述】:
我正在尝试将 NdefMessage 写入 NFC 标签,以便拥有一张 NFC 名片,当标签被用户手机轻触时显示联系人信息。
我想通过我的主应用程序传递联系信息。在 EditText 字段上,但我希望用户打开与 People 的联系人(Android 的默认应用程序)。
我无法理解如何编写正确的有效负载格式。
希望你能帮我解决这个问题!谢谢。
【问题讨论】:
我正在尝试将 NdefMessage 写入 NFC 标签,以便拥有一张 NFC 名片,当标签被用户手机轻触时显示联系人信息。
我想通过我的主应用程序传递联系信息。在 EditText 字段上,但我希望用户打开与 People 的联系人(Android 的默认应用程序)。
我无法理解如何编写正确的有效负载格式。
希望你能帮我解决这个问题!谢谢。
【问题讨论】:
我得到了这个工作。对于高级用户来说这很简单,但我认为像我这样的新手会很高兴找到这样的东西。下面的示例代码,请注意,由于 Type2 Tag 约束,我对一些数据进行了硬编码。
private NdefRecord createRecord(String text)
throws UnsupportedEncodingException {
//Intent intent = getIntent();
//EditText editTextWeb = (EditText)
EditText editText = (EditText) findViewById(R.id.editTextWeblinks);
String nameVcard = "BEGIN:VCARD" +"\n"+ "VERSION:2.1" +"\n" + "N:;" + editText.getText().toString() + "\n" +"ORG: PlanAyala"+"\n"+ "TEL;HOME:6302421" +"\n"+ "END:VCARD";
byte[] uriField = nameVcard.getBytes(Charset.forName("US-ASCII"));
byte[] payload = new byte[uriField.length + 1]; //add 1 for the URI Prefix
//payload[0] = 0x01; //prefixes http://www. to the URI
System.arraycopy(uriField, 0, payload, 1, uriField.length); //appends URI to payload
NdefRecord nfcRecord = new NdefRecord(
NdefRecord.TNF_MIME_MEDIA, "text/vcard".getBytes(), new byte[0], payload);
return nfcRecord;
}
【讨论】:
来自Wikipedia:
哑剧媒体:text/vcard
格式:
BEGIN:VCARD
VERSION:4.0
N:Gump;Forrest;;;
FN: Forrest Gump
ORG:Bubba Gump Shrimp Co.
TITLE:Shrimp Man
PHOTO:http://www.example.com/dir_photos/my_photo.gif
TEL;TYPE=work,voice;VALUE=uri:tel:+1-111-555-1212
TEL;TYPE=home,voice;VALUE=uri:tel:+1-404-555-1212
ADR;TYPE=work;LABEL="42 Plantation St.\nBaytown, LA 30314\nUnited States of America"
:;;42 Plantation St.;Baytown;LA;30314;United States of America
EMAIL:forrestgump@example.com
REV:20080424T195243Z
END:VCARD
您可以使用NFC Writer 写一个联系人,并使用NFC Tag info 查看它是如何写的。
这两个应用程序在 Google Play 上都是免费的。
【讨论】:
您现在可能已经有了答案。虽然,我的回答是 使用下面的字符串 开始:VCARD 版本:3.0 FN:你的名字在这里 ORG:工作场所 电子邮件:sample@gmail.com ADR:;;山景城,加利福尼亚州,美国 网址:www.google.com 电话:123456 结束:VCARD
或者,你也可以试试this app写。
【讨论】: