
我的第一步专注于标签读/写模式,目前我看不到有关如何使用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消息所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)