如何在Android上制作vcardvcal Ndef消息

如何在Android上制作vcardvcal Ndef消息,第1张

概述我是 Android编码的新手,我对NFC技术很感兴趣. 我的第一步专注于标签读/写模式,目前我看不到有关如何使用Vcard / Vcal MIME类型和NDEF记录/消息的大量信息. 如果有人可以发布一些示例代码或更好地指向类似教程的资源,那将是很好的! 编辑:这是我一直在使用的代码,它搞砸了.通过一些修改,我已经能够写出纯文本和智能海报/ urs数据.另外要记得的是,我正在使用Type 2 N @H_301_0@ @H_301_0@ 我是 Android编码的新手,我对NFC技术很感兴趣.
我的第一步专注于标签读/写模式,目前我看不到有关如何使用Vcard / Vcal MIME类型和NDEF记录/消息的大量信息.

如果有人可以发布一些示例代码或更好地指向类似教程的资源,那将是很好的!

编辑:这是我一直在使用的代码,它搞砸了.通过一些修改,我已经能够写出纯文本和智能海报/ urs数据.另外要记得的是,我正在使用Type 2 NFC标签,因为存储容量有限,我只想保存名称和放大器. Vcards上的电话号码,或活动名称& Vcal记录的日期.谢谢!

公共类VcardActivity扩展Activity {

NfcAdapter adapter;PendingIntent pendingIntent;IntentFilter writeTagFilters[];Tag tag;Context ctx;boolean writeMode;@OverrIDepublic voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_text);    getActionbar().setdisplayHomeAsUpEnabled(true);    ctx = this;    Switch swWrite = (Switch) findVIEwByID(R.ID.switchWriteText);    //final TextVIEw msg = (TextVIEw) findVIEwByID(R.ID.editText1);    final String msg = "BEGIN:VCARD\n" +            "VERSION:2.1\n" +            "N:Gump;Forrest\n" +            "FN:Forrest Gump\n" +            "ORG:Bubba Gump Shrimp Co.\n" +            "Title:Shrimp Man\n" +            "TEL;WORK;VOICE111) 555-1212\n" +            "TEL;HOME;VOice404) 555-1212\n" +            "ADR;WORK:;;100 Edge;Baytown;United\n" +            "EMAIL;PREF;INTERNET:forrestgump@example.com\n " +            "END:VCARD";    swWrite.setonCheckedchangelistener(new Compoundbutton.OnCheckedchangelistener() {        @OverrIDe        public voID onCheckedChanged(Compoundbutton buttonVIEw,boolean isChecked) {            if (isChecked) {                try {                    if (tag == null) {                        Toast.makeText(ctx,ctx.getString(R.string.error_detected),Toast.LENGTH_SHORT).show();                    } else {                        write(msg,tag);                        Toast.makeText(ctx,ctx.getString(R.string.ok_writing),Toast.LENGTH_LONG).show();                    }                } catch (IOException e) {                    Toast.makeText(ctx,ctx.getString(R.string.error_writing),Toast.LENGTH_LONG).show();                    e.printstacktrace();                } catch (FormatException e) {                    Toast.makeText(ctx,Toast.LENGTH_LONG).show();                    e.printstacktrace();                }            }        }    });    /* INTENT FILTER */    adapter = NfcAdapter.getDefaultAdapter(this);    pendingIntent = PendingIntent.getActivity(this,new Intent(this,getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_top),0);    IntentFilter tagDetected = new IntentFilter(            NfcAdapter.ACTION_TAG_disCOVERED);    tagDetected.addcategory(Intent.category_DEFAulT);    writeTagFilters = new IntentFilter[] { tagDetected };}@OverrIDepublic boolean onCreateOptionsMenu(Menu menu) {    getMenuInflater().inflate(R.menu.activity_text,menu);    return true;}@OverrIDepublic boolean onoptionsItemSelected(MenuItem item) {    switch (item.getItemID()) {    case androID.R.ID.home:        NavUtils.navigateUpFromSaMetask(this);        return true;    }    return super.onoptionsItemSelected(item);}private voID write(String text,Tag tag) throws IOException,FormatException {    NdefRecord[] records = { createRecord(text) };    NdefMessage message = new NdefMessage(records);    // Get an instance of Ndef for the tag.    Ndef ndef = Ndef.get(tag);    // Enable I/O    ndef.connect();    // Write the message    ndef.writeNdefMessage(message);    // Close the connection    ndef.close();}private NdefRecord createRecord(String text)        throws UnsupportedEnCodingException {    String msg = "BEGIN:VCARD\n" +            "VERSION:2.1\n" +            "N:Gump;Forrest\n" +            "FN:Forrest Gump\n" +            "ORG:Bubba Gump Shrimp Co.\n" +            "Title:Shrimp Man\n" +            "TEL;WORK;VOICE:55-1212\n" +            "TEL;HOME;VOICE:55-1212\n" +            "ADR;WORK:;;100 Edge;Ban;United\n" +            "EMAIL;PREF;INTERNET:p@example.com\n " +            "END:VCARD";            byte[] textBytes = msg.getBytes();            NdefRecord textRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,"text/x-vCard".getBytes(),new byte[] {},textBytes);    return textRecord;}@OverrIDeprotected voID onNewIntent(Intent intent) {    if (NfcAdapter.ACTION_TAG_disCOVERED.equals(intent.getAction())) {        tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);        Toast.makeText(this,this.getString(R.string.ok_detection) + tag.toString(),Toast.LENGTH_LONG).show();    }}@OverrIDepublic voID onPause() {    super.onPause();    WriteModeOff();}@OverrIDepublic voID onResume() {    super.onResume();    WriteModeOn();}private voID WriteModeOn() {    writeMode = true;    adapter.enableForegrounddispatch(this,pendingIntent,writeTagFilters,null);}private voID WriteModeOff() {    writeMode = false;    adapter.disableForegrounddispatch(this);}

}

解决方法 我写了一个 NDEF library,它提供了高级(即非字节数组)的NDEF记录/消息表示,它还附带了一个样板项目,演示了如何在AndroID上使用.

为了了解NDEF格式本身,我还编写了一个@L_502_2@,它提供了一个基于文件的图形编辑器.

干杯:-)

@H_301_0@ 总结

以上是内存溢出为你收集整理的如何在Android上制作vcard / vcal Ndef消息全部内容,希望文章能够帮你解决如何在Android上制作vcard / vcal Ndef消息所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1126753.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存