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

如何创建包含 NDEF 数据的 NFC 标签?

Android API Guides---NFC Basics

如何为可变长度有效负载格式化 NDEF 消息?

Android NFC 标签读写Demo与历史漏洞概述

使用 libnfc 格式化/读取/写入 NDEF Mifare 1K 卡