教學(xué)Android藍(lán)牙應(yīng)用開(kāi)發(fā)_第1頁(yè)
教學(xué)Android藍(lán)牙應(yīng)用開(kāi)發(fā)_第2頁(yè)
教學(xué)Android藍(lán)牙應(yīng)用開(kāi)發(fā)_第3頁(yè)
教學(xué)Android藍(lán)牙應(yīng)用開(kāi)發(fā)_第4頁(yè)
教學(xué)Android藍(lán)牙應(yīng)用開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

知識(shí)點(diǎn)Androld藍(lán)牙應(yīng)用開(kāi)發(fā)介紹AndroidBluetooth服務(wù)架構(gòu)撰寫(xiě)應(yīng)用程序的步驟Android藍(lán)牙API132藍(lán)牙(Bluetooth)是由SonyEricsson公司所研發(fā)出來(lái)的。它是一種無(wú)線通訊協(xié)議(Wireless)。主要用于短程和低耗電的設(shè)備。其有效通訊范圍約30英呎左右,傳輸速度為1Mb/s。至于WiFi則可達(dá)到300英呎(11Mb/s的速度)的范圍。介紹AndroidBluetooth服務(wù)架構(gòu)類(lèi)似地,WiFi則通常達(dá)到300英呎(11Mb/s的速度)。所以,藍(lán)芽適用于無(wú)線的外圍設(shè)備,進(jìn)行小量傳輸。例如麥克風(fēng),手機(jī),鍵盤(pán)等。至于WiFi則適用于傳輸大量數(shù)據(jù),作為一般網(wǎng)絡(luò)(如LAN)的延伸。

所以,藍(lán)芽適用于短距離的無(wú)線的外圍設(shè)備,進(jìn)行小量數(shù)據(jù)傳輸。例如麥克風(fēng),手機(jī),鍵盤(pán)等等。至于WiFi則適用于大量數(shù)據(jù)傳輸。

Android平臺(tái)支持藍(lán)芽,讓一個(gè)設(shè)備能與其它藍(lán)芽設(shè)備進(jìn)行無(wú)線通信。Android應(yīng)用框架提供API,讓Android應(yīng)用程序能尋找周邊的藍(lán)芽設(shè)備,然后監(jiān)控藍(lán)芽設(shè)備之間建立無(wú)線連結(jié),以及進(jìn)行通信。

搜索及配對(duì)周邊的藍(lán)芽設(shè)備。配對(duì)后,取得本機(jī)的Bluetoothadapter。建立RFCOMM通道。建立聯(lián)機(jī)(Connection)。實(shí)際進(jìn)行數(shù)據(jù)傳輸。管理多條聯(lián)機(jī)。使用Android的藍(lán)芽API,應(yīng)用程序可以:撰寫(xiě)應(yīng)用程序的步驟步驟通常為:

step-1啟動(dòng)手機(jī)本身的藍(lán)芽服務(wù)

step-2偵測(cè)(及配對(duì))周邊藍(lán)芽設(shè)備

step-3建立配對(duì)設(shè)備之間的聯(lián)機(jī)

step-開(kāi)始進(jìn)行數(shù)據(jù)傳輸Android藍(lán)芽API定義于:

android.bluetooth

套件(Package)里。

包括下述的類(lèi):

Android藍(lán)芽APIBluetoothAdapter

本機(jī)的BluetoothAdapter對(duì)象(Object)

是藍(lán)芽通信的起點(diǎn)。透過(guò)它可以偵測(cè)和配對(duì)周邊的藍(lán)芽設(shè)備。使用MAC地址建立一個(gè)

BluetoothDevice對(duì)象

,且誕生一個(gè)BluetoothServerSocket

去監(jiān)聽(tīng)其它設(shè)備。BluetoothDevice

代表一個(gè)周邊的藍(lán)芽設(shè)備(BluetoothDevice)。

BluetoothSocket

透過(guò)它,就能使用InputStream和OutputStream來(lái)與藍(lán)芽設(shè)備互相傳輸數(shù)據(jù)了。

BluetoothServerSocket

代表一個(gè)服務(wù)端設(shè)備的socket,持續(xù)監(jiān)聽(tīng)外來(lái)的信息。由服務(wù)端設(shè)備先開(kāi)啟socket,當(dāng)由外來(lái)要求連結(jié)時(shí),服務(wù)端接受時(shí),

BluetoothServerSocket會(huì)回傳一個(gè)代表客方(Client)的BluetoothSocket。

BluetoothClass

敘述著一個(gè)藍(lán)芽設(shè)備的各項(xiàng)屬性。應(yīng)用程序需要宣告兩項(xiàng)授權(quán),宣告于Androidmanifest.xml文檔里,如下:<?xmlversion="1.0"encoding="utf-8"?>………<uses-permissionandroid:name="android.permission.BLUETOOTH"/>

<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/>

………

</manifest>其中:BLUETOOTH_ADMIN

授權(quán)允許啟動(dòng)本手機(jī)的藍(lán)芽服務(wù)。BLUETOOTH

授權(quán)允許應(yīng)用程序去進(jìn)行通信。

先啟動(dòng)Server端設(shè)備的藍(lán)芽服務(wù),建立一個(gè)獨(dú)立的線程監(jiān)聽(tīng)來(lái)自Client的聯(lián)機(jī)要求。如下程序范例:?jiǎn)?dòng)Server端的藍(lán)芽服務(wù)privatestaticfinalStringNAME="BluetoothApp";privatestaticfinalUUIDMY_UUID=UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");publicclassmyServiceextendsService{

@OverridepublicvoidonStart(BundlesavedInstanceState){

//啟動(dòng)Server端的藍(lán)芽功能

BluetoothAdaptermAdapter=BluetoothAdapter.getDefaultAdapter();Threadt=newbtThread();t.start();}

privateclassbtThreadextendsThread{

privatefinalBluetoothServerSocketmServerSocket=null;

publicbtThread(){

try{

//啟動(dòng)Server端的監(jiān)聽(tīng)

Socket

mServerSocket=mAdapter.listenUsingRfcommWithServiceRecord(NAME,MY_UUID);

}catch(IOExceptione){}

}

publicvoidrun(){

BluetoothSocketsocket=null;

while(true){

try{

//一旦監(jiān)聽(tīng)到Client端的聯(lián)機(jī)請(qǐng)求,

//就誕生一個(gè)socket去服務(wù)該Client。

socket=mServerSocket.accept();

}catch(IOExceptione){

break;

}

publicvoidcancel(){

try{

mServerSocket.close();

}catch(IOExceptione){}

}

}Server端的監(jiān)聽(tīng)Socket可以繼續(xù)監(jiān)聽(tīng)更多Client的請(qǐng)求。不過(guò)本例只接受一個(gè)Client而已。一旦Server端設(shè)備的藍(lán)芽功能已經(jīng)啟動(dòng),準(zhǔn)備就緒了;Client端可主動(dòng)去偵測(cè)它、進(jìn)行配對(duì)和建立聯(lián)機(jī)。代碼如下:

啟動(dòng)Client端的藍(lán)芽服務(wù)--偵測(cè)它、進(jìn)行配對(duì)和建立聯(lián)機(jī)publicclassmyBluetoothActivityextendsActivity{

//……..@OverridepublicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

//取得Bluetoothadapter對(duì)象,來(lái)執(zhí)行藍(lán)芽任務(wù)

BluetoothAdapteradapter=BluetoothAdapter.getDefaultAdapter();

//如果adapter不是null表示本機(jī)藍(lán)芽已經(jīng)啟動(dòng)

//偵測(cè)Server端的藍(lán)牙設(shè)備,及配對(duì)

adapter.startDiscovery();

//可能配對(duì)到多個(gè)周邊的藍(lán)芽設(shè)備

Set<BluetoothDevice>devices=adapter.getBondedDevices();

}

}

在建立連結(jié)時(shí),我們需要一個(gè)MAC地址和一個(gè)RFCOMM信道(Channel)??赏高^(guò)服務(wù)UUID來(lái)取得RFCOMM通道。代碼如下:

建立聯(lián)機(jī),並進(jìn)行通信

privatestaticfinalStringNAME="BluetoothApp";privatestaticfinalUUIDMY_UUID=UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");private

staticStringaddress="XX:XX:XX:XX:XX:XX";//啟動(dòng)了本機(jī)的藍(lán)芽功能BluetoothAdapteradapter=BluetoothAdapter.getDefaultAdapter();BluetoothDevicedevice=adapter.getRemoteDevice(address);privatestaticfinalStringNAME="BluetoothApp";privatestaticfinalUUIDMY_UUID=UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");private

staticStringaddress="XX:XX:XX:XX:XX:XX";//啟動(dòng)了本機(jī)的藍(lán)芽功能BluetoothAdapteradapter=BluetoothAdapter.getDefaultAdapter();BluetoothDevicedevice=adapter.getRemoteDevice(address);//使用UUID去取得RFCOMM通道m(xù)mSocket=device.createRfcommSocketToServiceRecord(MY_UUID);//透過(guò)RFCOMM通道去向Server發(fā)出聯(lián)機(jī)要求mmSocket.connect();//取得聯(lián)機(jī)的outStream接口

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論