版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)三Android平臺下NFC標(biāo)簽讀取的開發(fā)一. 實(shí)驗(yàn)?zāi)康耐ㄟ^本實(shí)驗(yàn)了解Android開發(fā)的基本過程、簡單的web開發(fā)過程和NFC(近場通信)的工作原理,學(xué)會(huì)Java語言的面向?qū)ο蟮乃枷?,掌握Anroid開發(fā)、socket通信和NFC相關(guān)知識。二. 實(shí)驗(yàn)內(nèi)容 通過本實(shí)驗(yàn)開發(fā)出一個(gè)能在Android平臺下讀取NFC卡片相關(guān)信息的APP,并能與服務(wù)端(電腦)進(jìn)行通信,將讀取到的信息發(fā)送到服務(wù)端并保存。三. 實(shí)驗(yàn)環(huán)境1. windows系統(tǒng)電腦一臺;2. 支持NFC功能手機(jī)一部;3. NFC標(biāo)簽(飯卡也可)若干。4. 實(shí)驗(yàn)所需軟件如下:4.1 下載安裝JDK,并配置環(huán)境變量;4.2 下載安裝And
2、roid SDK 并配置Android SDK Manager;4.3下載安裝Eclipse;4.4 下載安裝Android開發(fā)工具ADT;4.5 下載安裝Tomcat;4.6 下載安裝數(shù)據(jù)庫Mysql;4.7 下載安裝數(shù)據(jù)庫可視化軟件Navicat for MySQL;四. 實(shí)驗(yàn)步驟1. 下載安裝JDK,并配置環(huán)境變量通過(1)安裝JDK 選擇安裝目錄安裝過程中會(huì)出現(xiàn)兩次安裝提示。第一次是安裝 jdk ,第二次是安裝 jre 。建議兩個(gè)都安裝在同一個(gè)java文件夾中的不同文件夾中(不能都安裝在java文件夾的根目錄下,jdk和jre安裝在同一文件夾會(huì)出錯(cuò))。因此,安裝路徑最好應(yīng)如下圖所示(2
3、)具體步驟:2.1) :安裝jdk 隨意選擇目錄只需把默認(rèn)安裝目錄 java 之前的目錄修改即可2.2) :安裝jre更改 java 之前目錄和安裝 jdk 目錄相同即可注:若無安裝目錄要求,可全默認(rèn)設(shè)置。無需做任何修改,兩次均直接點(diǎn)下一步。(3)安裝成功后繼續(xù)配置Java的環(huán)境變量以便讓系統(tǒng)知道JDK的具體位置。3.1) :“開始”->“計(jì)算機(jī)”->“屬性”打開如下窗口“高級系統(tǒng)設(shè)置”->“高級”->“環(huán)境變量”打開環(huán)境變量配置窗口。3.2):在環(huán)境變量配置窗口中新建“系統(tǒng)變量”,變量名:JAVA_HOME變量值:C:Program FilesJavajdk1.8.0
4、_25變量名:CLASSPATH變量值:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar編輯變量名為Path的環(huán)境變量的變量值,在原有基礎(chǔ)上添加jdk1.8.0_25bin路徑和Android SDK的tools和platform-tools的文件夾路徑。;C:Program FilesJavajdk1.8.0_25bin;E:Javaadt-bundle-windows-x86-20140702sdktools;E:Javaadt-bundle-windows-x86-20140702sdkplatform-tools以上環(huán)境變量配置完成后,可以通
5、過以下方法驗(yàn)證JDK是否安裝成功。打開cmd窗口,輸入java -version查看JDK的版本信息,輸入javac檢測環(huán)境變量Path的變量值中是否添加了c:Javajdk1.8.0_25bin。安裝成功且配置環(huán)境變量正確會(huì)出現(xiàn)如下提示信息:2下載安裝Android SDKSDK:(software development kit)軟件開發(fā)工具包。被軟件開發(fā)工程師用于為特定的軟件包、軟件框架、硬件平臺、操作系統(tǒng)等建立應(yīng)用軟件的開發(fā)工具的集合。Android SDK 指的是Android專屬的軟件開發(fā)工具包。 Android SDK可從本實(shí)驗(yàn)提供了已下載并解壓好了的SDK,放在硬盤中即可,后面
6、要用到。3下載安裝EclipeseEclipse 是一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。要獲得Android應(yīng)用程序開發(fā)的集成開發(fā)環(huán)境,就Android來說,推薦Eclipse。Eclipse包直接解壓安裝即可。4下載安裝ADT前面我們已經(jīng)配置好了java的開發(fā)環(huán)境,下載安裝了Android SDK,安裝了開發(fā)Android的集成開發(fā)工具(Eclipse),但是Eclipse還沒有和Android SDK進(jìn)行關(guān)聯(lián),也就是它們現(xiàn)在是互相獨(dú)立的,就好比槍和子彈分開了。為了使得Android應(yīng)用的創(chuàng)建,運(yùn)行和調(diào)試更加方
7、便快捷,Android的開發(fā)團(tuán)隊(duì)專門針對Eclipse定制了一個(gè)插件:Android Development Tools(ADT)。(1)添加ADT。打開eclipse,進(jìn)入工作界面后點(diǎn)擊菜單欄的help,選擇install new software.進(jìn)入后點(diǎn)擊添加(add)按鈕。(2)加載ADT。選擇Add后,輸入你要輸入的名字和地址,如圖。稍等片刻,就會(huì)出現(xiàn)需要我們加載的內(nèi)容,選擇第一個(gè)開發(fā)工具(Develpe tools)中的所有組件。這里需要注意的是如果你的eclipse提示錯(cuò)誤,無法進(jìn)行下一步的話那么就是你的eclipse的版本有問題,請更換其他版本在進(jìn)行下載。其中下面的Name自己
8、填寫,location改為自己的ADT的安裝包的路徑,點(diǎn)擊Archive找到路徑并添加。點(diǎn)擊ok,完成添加(3)創(chuàng)建Android虛擬機(jī)。在安裝ADT插件完成之后,eclipse會(huì)重啟,這樣在eclipse的菜單界面會(huì)多兩個(gè)按鈕,點(diǎn)擊右邊ADT的管理器,進(jìn)入創(chuàng)建Android虛擬機(jī)。點(diǎn)擊后會(huì)出現(xiàn)以下界面,下面是以前創(chuàng)建的2個(gè)虛擬機(jī),點(diǎn)擊Create新建按照以下內(nèi)容創(chuàng)建你的虛擬機(jī),點(diǎn)擊正常(ok),完成創(chuàng)建。5. 下載安裝TomcatTomcat 服務(wù)器是一個(gè)免費(fèi)的開放源代碼的Web 應(yīng)用服務(wù)器,屬于輕量級應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調(diào)試JSP 程序
9、的首選。至此,可以安裝Tomcat了。下載好壓縮包后,直接解壓至某一目錄下,目錄中不能包含中文,上面安裝JDK的時(shí)候也是。解壓后如下所示:將此文件夾拷貝到你常用的根目錄下,這里以E盤為例。這樣就算安裝好了!接下來開始配置環(huán)境變量,打開環(huán)境變量同上操作,不在贅述。然后新建三個(gè)系統(tǒng)變量:TOMCAT_HOME=E:tomcat-6.0.39CATALINA_HOME=E:tomcat-6.0.39CATALINA_BASE=E:tomcat-6.0.391. 11在Classpath中最后添加%TOMCAT_HOME%libservlet-api.jar;在PAth中最前添加%CATALINA_H
10、OME%bin;注意:前后順序不影響2. 12至此,配置工作完成!打開bin文件夾,雙擊startup.bat它會(huì)自動(dòng)打開如下控制臺界面。不要關(guān)閉控制臺界面,打開瀏覽器,輸入http:/localhost:8080 出現(xiàn)Tomcat的網(wǎng)頁,證明安裝并配置成功!最后關(guān)閉控制臺,關(guān)閉控制臺即關(guān)閉Tomcat服務(wù)13注意:如果雙擊startup.bat時(shí)出現(xiàn)閃退,有三種可能1.注冊表有以前的Tomcat文件殘留2.配置不正確,重新配置一遍!3.版本沖突,剛上手的話最好不要裝很多個(gè)Tomcat,裝一個(gè)就夠了!如果非要裝多個(gè),要去service.bat里修改服務(wù)名稱使其不同名才可以。6. 下載
11、安裝數(shù)據(jù)庫管理軟件MysqlMySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉庫內(nèi),這樣就增加了速度并提高了靈活性,在WEB應(yīng)用方面 MySQL 是最好的關(guān)系數(shù)據(jù)庫管理系統(tǒng)應(yīng)用軟件之一。(1)、首先單擊MySQL5.5.21的安裝文件,出現(xiàn)該數(shù)據(jù)庫的安裝向?qū)Ы缑?,單擊“next”繼續(xù)安裝,如圖所示:(2)、在打開的窗口中,選擇接受安裝協(xié)議,單擊“next”繼續(xù)安裝,如圖所示:(3)、在出現(xiàn)選擇安裝類型的窗口中,有“typical(默認(rèn))”、“Complete(完全)”、“Custom(用戶自定義)”三個(gè)選項(xiàng),我們選擇“Custom”,因?yàn)橥ㄟ^自
12、定義可以更加的讓我們?nèi)ナ煜に陌惭b過程,單擊“next”繼續(xù)安裝,如圖所示: (4)、在出現(xiàn)自定義安裝界面中選擇mysql數(shù)據(jù)庫的安裝路徑,這里我設(shè)置的是“d:Program FileMySQL”,單擊“next”繼續(xù)安裝,如圖所示:(5)、接下來進(jìn)入到準(zhǔn)備安裝的界面,首先確認(rèn)一下先前的設(shè)置,如果有誤,按“back”返回,沒有錯(cuò)誤,單擊“Install”按鈕繼續(xù)安裝,如圖所示:(6)、單擊“Install”按鈕之后出現(xiàn)如下正在安裝的界面,經(jīng)過很少的時(shí)間,MySQL數(shù)據(jù)庫安裝完成,出現(xiàn)完成MySQL安裝的界面,如圖所示:這個(gè)界面單擊“next”就行。注意要選擇上邊的“Launch th
13、e MySQL Instance Configuration Wizard”選項(xiàng),這是啟動(dòng)MySQL的配置,單擊“Finish”按鈕,進(jìn)入到配置界面。(7)、MySQL數(shù)據(jù)庫的安裝十分簡單,關(guān)鍵是安裝完成之后的配置,單擊完成之后出現(xiàn)如下的配置界面向?qū)В瑔螕簟皀ext”進(jìn)行配置,如圖所示:(8)、在打開的配置類型窗口中選擇配置的方式,“Detailed Configuration(手動(dòng)精確配置)”、“Standard Configuration(標(biāo)準(zhǔn)配置)”,為了熟悉過程,我們選擇“Detailed Configuration(手動(dòng)精確配置)”,單擊“next”繼續(xù),如圖所示:(9)
14、、在出現(xiàn)的窗口中,選擇服務(wù)器的類型,“Developer Machine(開發(fā)測試類)”、“Server Machine(服務(wù)器類型)”、“Dedicated MySQL Server Machine(專門的數(shù)據(jù)庫服務(wù)器)”,我們僅僅是用來學(xué)習(xí)和測試,默認(rèn)就行,單擊“next”繼續(xù),如圖所示:(10)、在出現(xiàn)的配置界面中選擇mysql數(shù)據(jù)庫的用途,“Multifunctional Database(通用多功能型)”、“Transactional Database Only(服務(wù)器類型)”、“Non-Transactional Database Only(非事務(wù)處理型)”,這里我選擇的是第一項(xiàng),
15、通用安裝,單擊“next”繼續(xù)配置,如圖所示:(11)、在出現(xiàn)的界面中,進(jìn)行對InnoDB Tablespace進(jìn)行配置,就是為InnoDB 數(shù)據(jù)庫文件選擇一個(gè)存儲空間,如果修改了,要記住位置,重裝的時(shí)候要選擇一樣的地方,否則可能會(huì)造成數(shù)據(jù)庫損壞,當(dāng)然,對數(shù)據(jù)庫做個(gè)備份就沒問題了,如圖所示:(12)、在打開的頁面中,選擇mysql的訪問量,同時(shí)連接的數(shù)目,“Decision Support(DSS)/OLAP(20個(gè)左右)”、“Online Transaction Processing(OLTP)(500個(gè)左右)”、“Manual Setting(手動(dòng)設(shè)置,設(shè)置為15個(gè))這里選擇手動(dòng)設(shè)置,單擊
16、“next”繼續(xù),如圖所示:(13)、在打開的頁面中設(shè)置是否啟用TCP/IP連接,設(shè)定端口,如果不啟用,就只能在自己的機(jī)器上訪問mysql數(shù)據(jù)庫了,這也是連接java的操作,默認(rèn)的端口是3306,并啟用嚴(yán)格的語法設(shè)置,單擊“next”繼續(xù),如圖所示:(14)、在打開的字符編碼的頁面中,設(shè)置mysql要使用的字符編碼,第一個(gè)是西文編碼,第二個(gè)是多字節(jié)的通用utf8編碼,第三個(gè)是手動(dòng),我們選擇utf-8或者是gbk,單擊“next”,繼續(xù)配置,如圖所示:(15)、在打開的頁面中選擇是否將mysql安裝為windows服務(wù),還可以指定Service Name(服務(wù)標(biāo)識名稱),是否將mysql的bin
17、目錄加入到Windows PATH(加入后,就可以直接使用bin下的文件,而不用指出目錄名,比如連接,“mysql u username p password;”就可以了,單擊“next”繼續(xù)配置,如圖所示:(16)、在打開的頁面中設(shè)置是否要修改默認(rèn)root用戶(超級管理員)的密碼(默認(rèn)為空),“New root password”,如果要修改,就在此填入新密碼,并啟用root遠(yuǎn)程訪問的功能,不要?jiǎng)?chuàng)建匿名用戶,單擊“next”繼續(xù)配置,如圖所示:(17)、到這里所有的配置操作都已經(jīng)完成,單擊Execute按鈕執(zhí)行配置,如圖所示:(18)、過了幾分鐘,出現(xiàn)如下的提示界面就代表MySQL配置已經(jīng)結(jié)
18、束了,并提示了成功的信息。(19)、在服務(wù)中將mysql數(shù)據(jù)庫啟動(dòng),并在命令窗口中輸入“mysql h localhost u root -p”,接著在出現(xiàn)的提示中輸入用戶的密碼,如圖所示:從圖中可以看到mysql數(shù)據(jù)庫在啟動(dòng)之后,成功的登錄了,在此我們可以對數(shù)據(jù)庫進(jìn)行操作了。7. 下載安裝數(shù)據(jù)庫可視化工具Navicat for MySQL Navicat是數(shù)據(jù)庫的可視化工具,Navicat for MySQL一套專為 MySQL 設(shè)計(jì)的高性能數(shù)據(jù)庫管理及開發(fā)工具。通過它的圖形化界面,我們可以很清楚的查看數(shù)據(jù)的存儲信息,并可以做事務(wù)操作。8. 實(shí)現(xiàn)手機(jī)端讀取NFC標(biāo)簽信息。(1)創(chuàng)建第一個(gè)An
19、droid應(yīng)用程序啟動(dòng)Eclipse,選擇菜單File|New|Project 選擇other ,展開Android文件夾,選擇Android Application Project下一步:輸入你創(chuàng)建的工程名字,然后一直默認(rèn)點(diǎn)擊下一步,最后點(diǎn)擊完成。至此,你的第一個(gè)Android程序創(chuàng)建完成。要運(yùn)行你的項(xiàng)目時(shí),右鍵點(diǎn)擊你的項(xiàng)目名,選擇 run as|Android Application,選擇你想將此項(xiàng)目部署的目標(biāo)設(shè)備上,即可完成部署啟動(dòng)。(2)創(chuàng)建NFC讀取的應(yīng)用程序按照上一步做的,創(chuàng)建一個(gè)新的Android程序2.1) 在res|layout|下打開.xml布局文件,布局你的App主界面界
20、面布局文件如下:<LinearLayout xmlns:android="android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" ><TextView android:id="+id/tv1" android:layout_width="match_parent" android:layout_height="
21、;wrap_content" android:gravity="center" android:text="請將標(biāo)簽靠近手機(jī)背面" android:textSize="20sp" /><View android:layout_width="match_parent" android:layout_height="0.2dp" android:background="#000000" /><TextView android:id="+
22、id/tv2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="讀取標(biāo)簽ID號:" /><View android:layout_width="match_parent" android:layout_height="0.2dp" android:background="#000000" /><TextView and
23、roid:id="+id/tv3" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="標(biāo)簽類型信息" /></LinearLayout>2.2) 在scr下部署文件,找到你剛才創(chuàng)建的.java文件。scr文件下共有兩個(gè)包:其中com.example.nfc_lab包下的NFC_lab.java文件代碼如下:
24、package com.example.nfc_lab;import java.io.IOException;import com.jph.sdg.service.SendDateToServer;import android.app.Activity;import android.app.PendingIntent;import android.content.Intent;import android.content.IntentFilter;import android.content.IntentFilter.MalformedMimeTypeException;import andr
25、oid.nfc.NfcAdapter;import android.nfc.Tag;import android.nfc.tech.MifareClassic;import android.nfc.tech.NfcA;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Bu
26、tton;import android.widget.TextView;import android.widget.Toast;public class NFC_lab extends Activity private NfcAdapter nfcAdapter;private TextView tv1,tv2,tv3;private PendingIntent mPendingIntent;private IntentFilter mFilters;private String mTechLists;private String info=""private int mC
27、ount=0;Handler handler=new Handler()public void handleMessage(Message msg) switch (msg.what) case SendDateToServer.SEND_SUCCESS:break;case SendDateToServer.SEND_FAIL:break;default:break;private Button btnSend;Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceStat
28、e);setContentView(R.layout.activity_nfc_lab);init();/刷新控件/獲取默認(rèn)的NFC控制器nfcAdapter = NfcAdapter.getDefaultAdapter(this); if (nfcAdapter = null) tv1.setText("設(shè)備不支持NFC!"); finish(); return; if (!nfcAdapter.isEnabled() tv1.setText("請?jiān)谙到y(tǒng)設(shè)置中先啟用NFC功能!"); finish(); return; mPendingIntent =
29、 PendingIntent.getActivity(this, 0, new Intent(this, getClass().addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); / Setup an intent filter for all MIME based dispatches IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED); try ndef.addDataType("*/*"); catch (MalformedMimeTy
30、peException e) throw new RuntimeException("fail", e); mFilters = new IntentFilter ndef, ; / Setup a tech list for all NfcA tags mTechLists = new String new String NfcA.class.getName() ; private void init() / TODO 自動(dòng)生成的方法存根 tv1=(TextView) findViewById(R.id.tv1); tv2=(TextView) findViewById(
31、R.id.tv2); tv3=(TextView) findViewById(R.id.tv3); Override protected void onResume() / TODO 自動(dòng)生成的方法存根super.onResume();nfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists); Override protected void onNewIntent(Intent intent) / TODO 自動(dòng)生成的方法存根super.onNewIntent(intent); tv1.set
32、Text("發(fā)現(xiàn)新的 Tag: "+ +mCount);/mCount 計(jì)數(shù) String intentActionStr = intent.getAction();/ 獲取到本次啟動(dòng)的actionif (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intentActionStr)/ NDEF類型| NfcAdapter.ACTION_TECH_DISCOVERED.equals(intentActionStr)/ 其他類型| NfcAdapter.ACTION_TAG_DISCOVERED.equals(intentActionStr
33、) / 未知類型/在intent中讀取Tag idTag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);byte bytesId = tag.getId();/ 獲取id數(shù)組info=ByteArrayChange.ByteArrayToHexString(bytesId); tv2.setText("標(biāo)簽UID: "+info); tv3.setText(readTag(tag); new SendDateToServer(handler).SendDataToServer(info); public Stri
34、ng readTag(Tag tag) tv3=(TextView) findViewById(R.id.tv3); MifareClassic mfc = MifareClassic.get(tag); for (String tech : tag.getTechList() System.out.println(tech);/顯示設(shè)備支持技術(shù) boolean auth = false; /讀取TAG try String metaInfo = "" /Enable I/O operations to the tag from this TagTechnology obj
35、ect. mfc.connect();/部分設(shè)備可能會(huì)連接失敗,不支持讀取下面功能 int type = mfc.getType();/獲取TAG的類型 int sectorCount = mfc.getSectorCount();/獲取TAG中包含的扇區(qū)數(shù) String typeS = "" switch (type) case MifareClassic.TYPE_CLASSIC: typeS = "TYPE_CLASSIC" break; case MifareClassic.TYPE_PLUS: typeS = "TYPE_PLUS&q
36、uot; break; case MifareClassic.TYPE_PRO: typeS = "TYPE_PRO" break; case MifareClassic.TYPE_UNKNOWN: typeS = "TYPE_UNKNOWN" break; metaInfo += " 卡片類型:" + typeS + "n共" + sectorCount + "個(gè)扇區(qū)n共" + mfc.getBlockCount() + "個(gè)塊n存儲空間: " + mfc.getSize(
37、) + "Bn" return metaInfo; catch (Exception e) /Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); e.printStackTrace(); finally if (mfc != null) try mfc.close(); catch (IOException e) Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG) .show(); return "您的設(shè)備不支持查詢標(biāo)簽信息功能&
38、quot;/如果連接失敗 Override public void onPause() super.onPause(); nfcAdapter.disableForegroundDispatch(this); 在com.example.nfc_lab下的ByteArrayChange.java其中加入如下代碼:package com.example.nfc_lab;public class ByteArrayChange public static String ByteArrayToHexString(byte bytesId) /Byte數(shù)組轉(zhuǎn)換為16進(jìn)制字符串/ TODO 自動(dòng)生成的方法
39、存根 int i, j, in; String hex = "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" ; String output = ""
40、for (j = 0; j < bytesId.length; +j) in = bytesIdj & 0xff; i = (in >> 4) & 0x0f; output += hexi; i = in & 0x0f; output += hexi; return output;在com.example.service下的SendDataToServer.java中加入以下代碼:package com.example.service;import .HttpURLConnection;import .URL;import .URLEncoder;im
41、port java.util.HashMap;import java.util.Map;import android.os.Handler;/* * 通過GET方式向服務(wù)器發(fā)送數(shù)據(jù) */public class SendDateToServer /添加訪問IP地址,注:改為自己的IP地址格式為 http:/你的IP地址:8080private static String url="16:8080/Android_servlet_test/ServletForGETMethod"/模擬機(jī)測試的話,IP設(shè)為 /192.168.0
42、.106本機(jī)的IPv4地址/關(guān)于本機(jī)的IP地址,點(diǎn)擊電腦左下角的開始菜單,在搜索框內(nèi)輸入cmd,按下回車,然后在里面輸入ipconfig,再按下回車鍵/并在其中找到自己的Ipv4地址public static final int SEND_SUCCESS=0x123;public static final int SEND_FAIL=0x124;private Handler handler;public SendDateToServer(Handler handler) / TODO Auto-generated constructor stubthis.handler=handler;/*
43、 * 通過Get方式向服務(wù)器發(fā)送數(shù)據(jù) * param UID 標(biāo)簽號 */public void SendDataToServer(String UID) / TODO Auto-generated method stubfinal Map<String, String>map=new HashMap<String, String>();map.put("UID", UID);new Thread(new Runnable() Overridepublic void run() / TODO Auto-generated method stubtry
44、 if (sendGetRequest(map,url,"utf-8") handler.sendEmptyMessage(SEND_SUCCESS);/通知主線程數(shù)據(jù)發(fā)送成功else /將數(shù)據(jù)發(fā)送給服務(wù)器失敗 catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();).start();/* * 發(fā)送GET請求 * param map 請求參數(shù) * param url 請求路徑 * return * throws Exception */private boolean sendGetR
45、equest(Map<String, String> param, String url,String encoding) throws Exception / TODO Auto-generated method stub/http:/localhost:8080/ServerForGETMethod/ServletForGETMethod?name=aa&pwd=124StringBuffer sb=new StringBuffer(url);if (!url.equals("")&!param.isEmpty() sb.append(&qu
46、ot;?");for (Map.Entry<String, String>entry:param.entrySet() sb.append(entry.getKey()+"=");sb.append(URLEncoder.encode(entry.getValue(), encoding);sb.append("&");sb.deleteCharAt(sb.length()-1);/刪除字符串最后一個(gè)字符“&”HttpURLConnection conn=(HttpURLConnection) new URL(sb.
47、toString().openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("GET");/設(shè)置請求方式為GETif (conn.getResponseCode()=2000) return true;return false; 在AndroidManifest.xml中加入NFC權(quán)限及相關(guān)過濾器<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android=" pa
48、ckage="com.example.nfc_lab" android:versionCode="1" android:versionName="1.0" ><uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" /><uses-permission android:name="android.permission.NFC" /><uses-permission
49、android:name="android.permission.READ_PHONE_STATE"/><uses-feature android:name="android.hardware.nfc" android:required="true" /><uses-permission android:name="android.permission.INTERNET"/><application android:allowBackup="true" and
50、roid:icon="drawable/ic_launcher" android:label="string/app_name" android:theme="style/AppTheme" ><activity android:name=".NFC_lab" android:label="string/app_name" ><intent-filter><action android:name="ent.action.MAIN
51、" /><category android:name="ent.category.LAUNCHER" /></intent-filter><intent-filter><action android:name="android.nfc.action.NDEF_DISCOVERED"/></intent-filter><intent-filter><action android:name="android.nfc.action.TA
52、G_DISCOVERED"></action><category android:name="ent.category.DEFAULT"></category></intent-filter><intent-filter><action android:name="android.nfc.action.TECH_DISCOVERED" /></intent-filter><meta-data android:name="
53、;android.nfc.action.TECH_DISCOVERED" android:resource="xml/nfc_tech_filter" /></activity></application></manifest>2.3) 在res|文件下加入可識別NFC類型的范圍的xml文件右鍵點(diǎn)擊res,新建文件夾,名字為xml,建立完成后,右鍵xml文件找到other,在新建向?qū)?,找到XML文件夾,找到XML File選中,點(diǎn)擊下一步,在文件名中輸入nfc_tech_filter.xml點(diǎn)擊完成,雙擊新建xml文件,
54、打開鍵入以下內(nèi)容:<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"><!- 可以處理所有Android支持的NFC類型 -><tech-list><tech>android.nfc.tech.IsoDep</tech><tech>android.nfc.tech.NfcA</tech><tech>android.nfc.tech.NfcB</tech><tech>android.nfc.tech.NfcF</tech><tech>android.nfc.tech.NfcV</tech><tech>android.nfc.tech.Ndef</tech>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年中國組合刀具市場調(diào)查研究報(bào)告
- 幼兒園膳食營養(yǎng)工作方案
- 2024年加強(qiáng)半圓頭方頸螺栓項(xiàng)目可行性研究報(bào)告
- 私募寵物產(chǎn)業(yè)投資考核試卷
- 應(yīng)急預(yù)案與演練在災(zāi)害風(fēng)險(xiǎn)管理中的價(jià)值考核試卷
- 搪瓷制品的藝術(shù)表現(xiàn)與文化意蘊(yùn)考核試卷
- 海水養(yǎng)殖的環(huán)境污染治理考核試卷
- 船舶防污涂層與清洗技術(shù)考核試卷
- xx小學(xué)課程規(guī)劃方案
- 社交電商平臺的運(yùn)營策略與商業(yè)模式創(chuàng)新實(shí)踐考核試卷
- 互聯(lián)網(wǎng)發(fā)展靠創(chuàng)新 課件 2024-2025學(xué)年人教版(2024)初中信息科技七年級全一冊
- 患者溝通技巧
- 廣告?zhèn)惱韱栴}
- 十歲生日模板
- 期中檢測卷(試題)-2024-2025學(xué)年北師大版五年級上冊數(shù)學(xué)
- 北京盈科律師所管理制度
- 2024年宜賓人才限公司招聘高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 2024年國家國際發(fā)展合作署對外援助服務(wù)保障中心面向社會(huì)招聘工作人員6人歷年高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 2024年江西省高考地理真題(解析版)
- 電力公司臨時(shí)用工安全管理辦法(標(biāo)準(zhǔn)版)
- 山東省濟(jì)南市歷下區(qū)2023-2024學(xué)年五年級上學(xué)期月考英語試卷(12月份)
評論
0/150
提交評論