99精品在线免费观看I亚洲美女高潮久久久I中文字幕在线观看高清I国产一级精品视频I色偷偷伊人I成人h在线观看I铜铜铜铜铜铜铜铜免费观看I久久五月天婷婷I久久久综合视频I五月激情开心网I最新中文字幕avI四虎4hu永久免费深夜福利I99兴趣网

USB免驅(qū)NFC讀寫器 Android系統(tǒng)中NFC讀寫范例

2019-07-04 14:10:00
諾塔斯智能科技
原創(chuàng)
5939
摘要:由于Android具有良好的開源優(yōu)勢(shì),可進(jìn)行深度定制開發(fā)。安卓系統(tǒng)市場(chǎng)應(yīng)用比windows晚,雖然支持的應(yīng)用不如windows系統(tǒng)多,但由于系統(tǒng)的免費(fèi)開放性,眾多軟件廠商經(jīng)過近幾年的開發(fā),已經(jīng)有越來越多的應(yīng)用加入進(jìn)來,目前支持辦公、教學(xué)、娛樂已經(jīng)完全沒有問題。因此,越來越多的行業(yè)接受并認(rèn)可基于Android操作系統(tǒng)的設(shè)備。

由于Android具有良好的開源優(yōu)勢(shì),可進(jìn)行深度定制開發(fā)。安卓系統(tǒng)市場(chǎng)應(yīng)用比windows晚,雖然支持的應(yīng)用不如windows系統(tǒng)多,但由于系統(tǒng)的免費(fèi)開放性,眾多軟件廠商經(jīng)過近幾年的開發(fā),已經(jīng)有越來越多的應(yīng)用加入進(jìn)來,目前支持辦公、教學(xué)、娛樂已經(jīng)完全沒有問題。因此,越來越多的行業(yè)接受并認(rèn)可基于Android操作系統(tǒng)的設(shè)備。

目前市面上大多數(shù)工業(yè)控制設(shè)備開始采用Android系統(tǒng)了,然而這部分設(shè)備并沒有搭載原生的NFC功能。隨著近年來,NFC功能需求的興起,很多行業(yè)需要一直可以支持Android系統(tǒng)的可接入Android設(shè)備并進(jìn)行二次開發(fā)的NFC讀寫器。因此,L3-U這款NFC讀寫器 應(yīng)運(yùn)而生。作為一款采用USB免驅(qū)的NFC讀寫器,支持在windows、Android、linux等操作系統(tǒng),免費(fèi)提供基于上述各種系統(tǒng)的SDK,方便客戶進(jìn)行功能擴(kuò)展和二次開發(fā)。

L3-U這款USB免驅(qū)動(dòng)NFC讀寫器已經(jīng)設(shè)計(jì)好了USB 驅(qū)動(dòng),用戶在基于Android系統(tǒng)的設(shè)備上只有能獲取USB HOST權(quán)限或者采用OTG傳輸就可以使用,無需安裝額外驅(qū)動(dòng)。如果你其它非標(biāo)準(zhǔn)的Android設(shè)備,需要提供設(shè)備我們進(jìn)行編譯驅(qū)動(dòng)。以下為標(biāo)準(zhǔn)的具有USB HOST權(quán)限的設(shè)備接入NFC讀寫器的過程。供大家在進(jìn)行NFC讀寫器二次開發(fā)過程中參考!

1、在項(xiàng)目中對(duì)AndroidManifest.xml文件進(jìn)行配置,獲取相關(guān)權(quán)限。

     <uses-permission android:name="android.permission.NFC" />
    <uses-feature
        android:name="android.hardware.nfc"
        android:required="true" />    
    <uses-sdk
        android:minSdkVersion="12"
        android:targetSdkVersion="17" />
              <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/*" />
            </intent-filter>                       
            <intent-filter>
                <action android:name="android.nfc.action.TECH_DISCOVERED" />
            </intent-filter>
            <meta-data
                android:name="android.nfc.action.TECH_DISCOVERED"
                android:resource="@xml/nfc_tech_filter" />           

2、建立一個(gè)Activity頁面,用于實(shí)現(xiàn)NFC讀寫的功能。NFC讀寫功能實(shí)現(xiàn)的代碼如下:

package cc.lotusnfc;
import java.io.IOException;
import java.nio.charset.Charset;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import cc.lotusnfc.R;
import android.nfc.FormatException;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.NfcManager;
import android.nfc.Tag;
import android.nfc.tech.MifareClassic;
import android.nfc.tech.Ndef;
import android.nfc.tech.NfcA;
import android.os.Bundle;
import android.os.Parcelable;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
	private TextView resultText;
	private PendingIntent pendingIntent;
	private IntentFilter[] mFilters;
	private String[][] mTechLists;
	private Button mJumpTagBtn;
	private boolean isFirst = true;
	private NfcAdapter m_NfcAdpater;
	private EditText m_edtLog;
	private Intent m_NfcIntent  = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// 獲取nfc適配器,判斷設(shè)備是否支持NFC功能
		m_NfcAdpater = NfcAdapter.getDefaultAdapter(this);
		if (m_NfcAdpater == null) {
			Toast.makeText(this, "Not Found NfcAdapter!", Toast.LENGTH_SHORT)
					.show();
			//finish();
			//return;
		} else if (!m_NfcAdpater.isEnabled()) {
			Toast.makeText(this, "Please Enabled NfcAdapter",
					Toast.LENGTH_SHORT).show();
			//finish();
			//return;
		}
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		m_edtLog = (EditText) findViewById(R.id.edtLog);
		m_edtLog.setText("");
		pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
				getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
		IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
		ndef.addCategory("*/*");
		mFilters = new IntentFilter[] { ndef };// 過濾器
		mTechLists = new String[][] {
				new String[] { MifareClassic.class.getName() },
				new String[] { NfcA.class.getName() } };// 允許掃描的標(biāo)簽類型
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	@SuppressLint("NewApi")
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		m_NfcAdpater.enableForegroundDispatch(this, pendingIntent, mFilters,
				mTechLists);
	}
	private NdefMessage createMessage(String text) {
		NdefRecord[] record = new NdefRecord[1];
		String lang = "en";
		byte[] langBytes = lang.getBytes(Charset.forName("US-ASCII"));
		byte[] textBytes = text.getBytes(Charset.forName("UTF-8"));
		char status = (char) (langBytes.length);
		byte[] data = new byte[1 + langBytes.length + textBytes.length];
		data[0] = (byte) status;
		System.arraycopy(langBytes, 0, data, 1, langBytes.length);
		System.arraycopy(textBytes, 0, data, 1 + langBytes.length,
				textBytes.length);
		record[0] = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
				NdefRecord.RTD_TEXT, new byte[0], data);
		return new NdefMessage(record);
	}
	@Override
	protected void onNewIntent(Intent intent) {
		// TODO Auto-generated method stub
		super.onNewIntent(intent);
		m_NfcIntent = intent;
		String strWriteText = "春眠不覺曉";
		if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) {
			Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
			Ndef ndef = Ndef.get(tagFromIntent);
			if (ndef != null) {
				NdefMessage ndefMessage = createMessage(strWriteText);
				try {
					ndef.connect();
					// READ
					NdefMessage msg = ndef.getNdefMessage();
					if(null == msg) return;
					NdefRecord[] records = msg.getRecords();
					// NdefMessage nmsg = (NdefMessage) msgs[0];
					NdefRecord record = records[0];
					String resultStr = "";
					if (record.getTnf() == NdefRecord.TNF_WELL_KNOWN) {
						if (Arrays
								.equals(record.getType(), NdefRecord.RTD_TEXT)) {
							byte[] payload = record.getPayload();
							if (payload == null)
								return;
							try {
								String textEString = ((payload[0] & 0x80) == 0) ? "UTF-8"
										: "UTF-16";
								int languageCodeLength = payload[0] & 0x3f;
								resultStr = new String(payload,
										languageCodeLength + 1, payload.length
												- languageCodeLength - 1,
										textEString);
								AddLog("Read:" + resultStr);
							} catch (Exception e) {
								e.printStackTrace();
							}
						}
					}
					// WRITE
					ndef.writeNdefMessage(ndefMessage);
					AddLog("WRITE:" + strWriteText);
					ndef.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					AddLog("IOException" );
				} catch (FormatException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					AddLog("FormatException" );
				}
			}
		}
	}
	private void AddLog(String strLog) {
		SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
		Date curDate = new Date(System.currentTimeMillis());// 獲取當(dāng)前時(shí)間
		String strDate = formatter.format(curDate);
		if (null == m_edtLog)
			return;
		String strLogs = m_edtLog.getText().toString().trim();
		if (strLogs.equals("")) {
			strLogs = strDate + " " + strLog;
		} else {
			strLogs += "\r\n" + strDate + " " + strLog;
		}
		m_edtLog.setText(strLogs);
	}
	public void OnClearLogListener(View arg0) {
		if (null == m_edtLog)
			return;
		m_edtLog.setText("");
	}
	public void OnSetNfcListener(View arg0) {
		startActivityForResult(new Intent(
				android.provider.Settings.ACTION_WIRELESS_SETTINGS), 0);		
	}
	
	public void OnTestListener(View arg0) {
		String strWriteText = "春眠不覺曉";
		if(null == m_NfcIntent) return;
		if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(m_NfcIntent.getAction())) {
			Tag tagFromIntent = m_NfcIntent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
			Ndef ndef = Ndef.get(tagFromIntent);
			if (ndef != null) {
				NdefMessage ndefMessage = createMessage(strWriteText);
				try {
					ndef.connect();
					// READ
					NdefMessage msg = ndef.getNdefMessage();
					NdefRecord[] records = msg.getRecords();
					// NdefMessage nmsg = (NdefMessage) msgs[0];
					NdefRecord record = records[0];
					String resultStr = "";
					if (record.getTnf() == NdefRecord.TNF_WELL_KNOWN) {
						if (Arrays
								.equals(record.getType(), NdefRecord.RTD_TEXT)) {
							byte[] payload = record.getPayload();
							if (payload == null)
								return;
							try {
								String textEString = ((payload[0] & 0x80) == 0) ? "UTF-8"
										: "UTF-16";
								int languageCodeLength = payload[0] & 0x3f;
								resultStr = new String(payload,
										languageCodeLength + 1, payload.length
												- languageCodeLength - 1,
										textEString);
								AddLog("Read:" + resultStr);
							} catch (Exception e) {
								e.printStackTrace();
							}
						}
					}
					// WRITE
					ndef.writeNdefMessage(ndefMessage);
					AddLog("WRITE:" + strWriteText);
					ndef.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (FormatException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

以為內(nèi)容是在Android設(shè)備上接入L3-U 免驅(qū)NFC讀寫器的范例,讀寫NFC標(biāo)簽需要安裝NDEF格式進(jìn)行處理,這部分后面單獨(dú)列出來分享給大家。



發(fā)表評(píng)論
評(píng)論通過審核后顯示。
熱門文章推薦
關(guān)于PSAM卡、SAM卡、SIM卡的特征和區(qū)別 2019-03-22 由于人們對(duì)PSAM卡、SAM卡、SIM卡的概念理解不到位加之很少仔細(xì)的對(duì)PSAM卡、SAM卡、SIM卡實(shí)物進(jìn)行區(qū)別,容易將PSAM卡、SAM卡、SIM卡混為一談。諾塔斯智能科技就PSAM卡、SAM卡、SIM卡三者特征和作用進(jìn)行介紹,幫助大家對(duì)PSAM卡、SAM卡、SIM卡進(jìn)行深刻的認(rèn)識(shí)和區(qū)分。
M1卡常見問題和處理方法 2019-02-21 M1卡是恩智浦出品的芯片縮寫,全稱為NXP Mifare1系列,常用的有S50及S70兩種型號(hào),截止到2013年11月4日,已經(jīng)有國產(chǎn)芯片與其兼容,利用PVC封裝M1芯片、感應(yīng)天線,然后壓制成型后而制作的卡即是智能卡行業(yè)所說的M1卡。M1卡的優(yōu)點(diǎn)是可讀可寫的多功能卡,缺點(diǎn)是:價(jià)格稍貴,感應(yīng)距離短,目前適合非定額消費(fèi)系統(tǒng)、停車場(chǎng)系統(tǒng)、門禁考勤系統(tǒng)等,目前應(yīng)用最廣泛的非接觸式IC卡。
NFC數(shù)據(jù)交換格式(NDEF)規(guī)范 2019-05-28 為實(shí)現(xiàn)標(biāo)簽和NFC設(shè)備,及NFC設(shè)備之間的交互通信,NFC論壇定義了稱為NFC數(shù)據(jù)交換格式(NDEF)的通用數(shù)據(jù)格式。 NDEF是輕量級(jí)的緊湊的二進(jìn)制格式,可帶有URL,vCard和NFC定義的各種數(shù)據(jù)類型。
非接觸式IC卡(M1卡)區(qū)塊讀寫控制 2019-02-21 非接觸式IC卡系列中的Mifare One (M1卡)的優(yōu)點(diǎn)是可讀可寫的多功能卡,缺點(diǎn)是:價(jià)格稍貴,感應(yīng)距離短,目前適合非定額消費(fèi)系統(tǒng)、停車場(chǎng)系統(tǒng)、門禁考勤系統(tǒng)等,目前應(yīng)用最廣泛的 非接觸式IC卡。諾塔斯智能科技專業(yè)從事非接觸式IC卡讀寫器的研發(fā)與銷售,為各行業(yè)用戶提供專業(yè)的IC卡系統(tǒng)解決方案。
聯(lián)系我們
聯(lián)系人: 張經(jīng)理
電話: 400-023-6659
傳真: 023-68798110
Email: 843718693@qq.com
QQ: 843718693
微信: Lotus-Smart
微博: lotusreader
旺旺: 諾塔斯智能科技有限公司
地址: 重慶市江北區(qū)宏帆路36號(hào)宏帆天地1棟6樓
  • 諾塔斯智能科技在線客服
    在線客服
  • 重慶諾塔斯智能科技有限公司微信公眾號(hào)
    關(guān)注微信
  • 諾塔斯智能科技網(wǎng)上商城
    網(wǎng)上商城
移動(dòng)訪問
主站蜘蛛池模板: 国产h视频| 无套内谢少妇高潮免费 | 亚洲免费看片 | 亚洲色图网站 | 国产黄色一级片 | 亚洲成人一区二区三区 | 一本大道久久久久精品嫩草 | 日韩成人片 | 亚洲精品欧美 | av最新网址 | 99福利视频| 久草精品在线 | 国产日韩欧美一区二区 | 精产国产伦理一二三区 | 国产视频一区二区三区四区 | 国产精品九九九 | 华丽的外出在线观看 | 亚洲免费在线视频 | 国产精品资源 | 欧美精品区 | 国产精品色 | 久久国产电影 | 久久久久久久久久久久久久 | 日本中文字幕在线播放 | 国产精品无码一区二区三区免费 | 亚洲香蕉视频 | 国产农村妇女精品一二区 | 久久午夜无码鲁丝片午夜精品 | 亚洲免费一区二区 | 一区在线视频 | 亚洲精品一二三区 | 91精品人妻一区二区三区蜜桃欧美 | 日本一区二区视频 | 丰满熟女人妻一区二区三 | 婷婷色图| 免费在线观看毛片 | 日韩一级片在线观看 | 六月婷婷综合 | 黄色av网| 九九热精品视频 | 国产又粗又大又黄 | 成人性生交大片免费卡看 | 69免费视频| 国产一区二区不卡 | 91精品人妻一区二区三区蜜桃欧美 | 超碰中文字幕 | 日韩免费一区 | 影音先锋男人站 | 大乳巨大乳j奶hd | 午夜精品久久久久久久99老熟妇 | 亚洲精品国产精品国自产观看 | 日韩成人无码 | 人妻丰满熟妇aⅴ无码 | 欧美激情在线播放 | 国产成人+综合亚洲+天堂 | 亚洲经典一区二区 | 日韩99 | 欧美操操操 | 少妇被按摩师摸高潮了 | 成人免费av | 伊人中文字幕 | 欧美日韩精品一区二区 | 视频在线观看网站免费 | 香蕉视频免费 | 日韩高清一区 | 久久精品网 | 91麻豆产精品久久久久久夏晴子 | 大j8黑人w巨大888a片 | 午夜精品久久久久久久99老熟妇 | 亚洲经典一区二区 | av福利在线| 无码人妻熟妇av又粗又大 | 国产日韩欧美一区二区 | 亚洲精品久久久久久 | 国产一区二区三区四区在线观看 | 明日叶三叶 | 一本色道久久加勒比精品 | 青青草视频 | 99re在线观看| 亚洲aaa| 97在线观看免费高清 | 一区二区亚洲 | 欧美日韩精品一区二区 | 麻豆影视| 草久久| 91精品国产一区二区三竹菊影视 | 蜜臀99久久精品久久久久久软件 | 少妇被按摩师摸高潮了 | 国产成人精品一区二区 | 日韩av电影网 | 久久99精品久久久久久 | 老妇高潮潮喷到猛进猛出 | 成人免费视频网站 | 激情六月天 | 午夜免费福利视频 | 六月婷婷综合 | 欧美99 | 男人天堂网站 | 国产乱国产乱老熟300部视频 |