【问题标题】:How to build write a Contact (vcard format) into a NdefMessage?如何将联系人(电子名片格式)写入 NdefMessage?
【发布时间】:2012-11-09 20:59:17
【问题描述】:

我正在尝试将 NdefMessage 写入 NFC 标签,以便拥有一张 NFC 名片,当标签被用户手机轻触时显示联系人信息。

我想通过我的主应用程序传递联系信息。在 EditText 字段上,但我希望用户打开与 People 的联系人(Android 的默认应用程序)。

我无法理解如何编写正确的有效负载格式。

希望你能帮我解决这个问题!谢谢。

【问题讨论】:

    标签: android nfc


    【解决方案1】:

    我得到了这个工作。对于高级用户来说这很简单,但我认为像我这样的新手会很高兴找到这样的东西。下面的示例代码,请注意,由于 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;
    }
    

    【讨论】:

    • 感谢您发布此示例。它是否像您想要的那样工作?也就是说,您从自己的应用发送联系信息,然后它会在接收设备上使用 Android 的默认联系人应用打开?
    • 是的,我通过 EditText 提供 Vcard 数据。当您将此 MIME 类型声明为 text/vcard 时,Android 系统将打开一个支持该类型信息的应用程序,在这种情况下,人员应用程序将添加并因此您包含在 NFC 标签上的联系信息。我让这段代码在 ndef writer 应用程序上运行。如果这对您有帮助,请告诉我:]
    • @maze_mx 你能用电子邮件格式更新答案吗?这对我有帮助
    【解决方案2】:

    来自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 上都是免费的。

    【讨论】:

      【解决方案3】:

      您现在可能已经有了答案。虽然,我的回答是 使用下面的字符串 开始:VCARD 版本:3.0 FN:你的名字在这里 ORG:工作场所 电子邮件:sample@gmail.com ADR:;;山景城,加利福尼亚州,美国 网址:www.google.com 电话:123456 结束:VCARD

      或者,你也可以试试this app写。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-18
        • 1970-01-01
        • 2012-01-23
        • 2010-09-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多