基于NFC的Android读写软件,Android基于nfc的读写(一)
這里寫自定義目錄標題
Android的NFC讀寫(一)
NFC簡介
代碼解析
源碼(Demo)
Android的NFC讀寫(一)
近來,因需求需要開發nfc讀寫功能,網上查閱了許多資料,發現相關方面資料魚龍混雜,許多demo甚至無法跑起來,于是無奈只能硬啃官方文檔,終于頗有感悟,demo見末尾
nfc相關資料,大家可以參考以下幾個網站,里面講的非常透徹。
https://developer.android.com/guide/topics/connectivity/nfc
https://developer.android.com/guide/topics/connectivity/nfc/nfc.html
https://developer.android.com/guide/topics/connectivity/nfc/advanced-nfc.html
NFC簡介
這里簡單的介紹一下nfc,近場通信(NFC)是一組短距離無線技術,通常需要4cm或更短的距離才能啟動連接。NFC允許您在NFC標簽和Android設備之間或兩個Android設備之間共享小的數據有效負載。在Android中,我們通常會遇到三種操作模式:
讀/寫模式,允許NFC設備讀取和/或寫入被動NFC標簽和貼紙。
P2P模式,允許NFC設備與其他NFC對等體交換數據; Android Beam使用此操作模式。
卡仿真模式,允許NFC設備本身充當NFC卡。然后,可以通過外部NFC讀取器(例如NFC銷售點終端)訪問模擬的NFC卡。
本文實現了nfc標簽NDEF和ultralight兩種格式的讀取效果
代碼解析
首先先配置android權限,文件內容如下:
標簽調度系統的基本工作方式如下:
1.嘗試以解析NFC標記(ACTION_NDEF_DISCOVERED或其中一個ACTION_TECH_DISCOVERED)時標記調度系統創建的意圖啟動一個Activity 。
2.如果沒有活動過濾該意圖,請嘗試啟動具有下一個最低優先級意圖的活動(ACTION_TECH_DISCOVERED或者ACTION_TAG_DISCOVERED),直到應用程序篩選意圖或標記分派系統嘗試所有可能的意圖。
3.如果沒有應用程序篩選任何意圖,請不執行任何操作。
大家可以參考這張圖
然后將Activity啟動模式設置為singleTop,在這種模式下,如果Activity已經在任務棧的棧頂了,當再次啟動同一個Activity的時候,這個Activity不會被重新創建,而且它的onNewIntent()方法會被調用,但是它的onCreate()、onStart()方法不會被調用。
#####新建xml文件夾,新建nfc_tech文件(自定義):
該文件指定您的活動在tech-list集合中支持的技術,如下所示:
android.nfc.tech.IsoDep
android.nfc.tech.NfcA
android.nfc.tech.NfcB
android.nfc.tech.NfcF
android.nfc.tech.NfcV
android.nfc.tech.Ndef
android.nfc.tech.NdefFormatable
android.nfc.tech.MifareClassic
android.nfc.tech.MifareUltralight
在主界面方法里判斷手機是否具有nfc功能,如下所示:
if (mNfcAdapter == null) {
Toast.makeText(this, "該設備不支持nfc", Toast.LENGTH_SHORT).show();
finish();
return;
}
if (!mNfcAdapter.isEnabled()) {
Toast.makeText(this, "請打開nfc開關", Toast.LENGTH_SHORT).show();
Intent intent=new Intent(Settings.ACTION_NFC_SETTINGS);
startActivity(intent);
}
//創建PendingIntent對象,當檢查到一個tag標簽就會執行此Intent
mPendingIntent=PendingIntent.getActivity(this,0,new Intent(this,getClass()),0);
在onNewIntent方法中取出獲取到的標簽,并進入讀取標簽的方法:
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
String techList[] = tag.getTechList();
for (String tech : techList) {
System.out.print(tech);
}
readNdeftag(tag);
自定義讀取標簽的方法:這里目前只做了NDEF格式的讀取:
Ndef ndef = Ndef.get(tag);
try {
ndef.connect();
NdefMessage ndefMessage = ndef.getNdefMessage();
if (ndefMessage != null) {
mReadText.setText(parseTextRecord(ndefMessage.getRecords()[0]));
Toast.makeText(this, "成功", Toast.LENGTH_SHORT).show();
}else {
mReadText.setText("該標簽為空標簽");
}
源碼(Demo)
最后Demo已經上傳,歡迎大家交流下載,不足之處,還望請教。
鏈接: https://github.com/zcyyouminghuo/Android_NfcDemo.
總結
以上是生活随笔為你收集整理的基于NFC的Android读写软件,Android基于nfc的读写(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【51单片机快速入门指南】5.3:SPI
- 下一篇: 转:编写高效的Android代码