NFC技术:读写非NDEF格式的数据
Posted 张兮兮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NFC技术:读写非NDEF格式的数据相关的知识,希望对你有一定的参考价值。
1 //向nfc标签读写MifareUltraligh格式的数据 2 public class MainActivity extends Activity { 3 private CheckBox mwriteData; 4 private NfcAdapter mNfcAdapter; 5 private PendingIntent mPendingIntent; 6 7 @Override 8 protected void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.fragment_main); 11 12 mwriteData = (CheckBox) findViewById(R.id.checkBox1); 13 mNfcAdapter = NfcAdapter.getDefaultAdapter(this); 14 mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, 15 getClass()), 0); 16 } 17 18 @Override 19 protected void onNewIntent(Intent intent) { 20 // TODO Auto-generated method stub 21 super.onNewIntent(intent); 22 Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 23 24 String[] techList = tag.getTechList(); 25 boolean haveMifareUltralight = false; 26 for (String tech : techList) { 27 if (tech.indexOf("MifareUltralight") >= 0) { 28 haveMifareUltralight = true; 29 break; 30 } 31 32 } 33 if (!haveMifareUltralight) { 34 Toast.makeText(this, "不支持MifareUltralight格式数据", 0).show(); 35 return; 36 } 37 // 选中为写数据 38 if (mwriteData.isChecked()) { 39 writeTag(tag); 40 41 } 42 // 否则为读数据 43 else { 44 String data = readTag(tag); 45 if (data != null) { 46 Toast.makeText(this, data, 0).show(); 47 } 48 } 49 50 } 51 52 @Override 53 protected void onResume() { 54 // TODO Auto-generated method stub 55 super.onResume(); 56 if (mNfcAdapter != null) { 57 mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, null, 58 null); 59 } 60 } 61 62 @Override 63 protected void onPause() { 64 // TODO Auto-generated method stub 65 super.onPause(); 66 if (mNfcAdapter != null) { 67 mNfcAdapter.disableForegroundDispatch(this); 68 } 69 } 70 71 // 向nfc标签写MifareUltralight格式数据 72 public void writeTag(Tag tag) { 73 MifareUltralight ultralight = MifareUltralight.get(tag); 74 try { 75 ultralight.connect(); 76 ultralight.writePage(4, "中国".getBytes(Charset.forName("GB2312"))); 77 ultralight.writePage(5, "美国".getBytes(Charset.forName("GB2312"))); 78 ultralight.writePage(6, "韩国".getBytes(Charset.forName("GB2312"))); 79 ultralight.writePage(7, "日本".getBytes(Charset.forName("GB2312"))); 80 81 Toast.makeText(this, "写入MifareUltralight格式数据成功", 0).show(); 82 } catch (Exception e) { 83 // TODO: handle exception 84 } finally { 85 try { 86 ultralight.close(); 87 } catch (IOException e) { 88 // TODO Auto-generated catch block 89 e.printStackTrace(); 90 } 91 } 92 } 93 94 public String readTag(Tag tag) { 95 MifareUltralight ultralight = MifareUltralight.get(tag); 96 try { 97 ultralight.connect(); 98 byte[] data = ultralight.readPages(4); 99 return new String(data, Charset.forName("GB2312")); 100 101 } catch (Exception e) { 102 // TODO: handle exception 103 } finally { 104 105 try { 106 ultralight.close(); 107 } catch (IOException e) { 108 // TODO Auto-generated catch block 109 e.printStackTrace(); 110 } 111 112 } 113 return null; 114 115 } 116 }
以上是关于NFC技术:读写非NDEF格式的数据的主要内容,如果未能解决你的问题,请参考以下文章
NFC Basics(基本NFC)——翻译自developer.android.com