藍牙設備在連接前,會先檢查設備是否已經(jīng)配對過,如果沒有則先配對,配對完成后,再開始連接。
創(chuàng)新互聯(lián)公司服務項目包括萊州網(wǎng)站建設、萊州網(wǎng)站制作、萊州網(wǎng)頁制作以及萊州網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,萊州網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到萊州省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
藍牙連接開始于設備列表 DeviceListPreferenceFragment的onPreferenceTreeClick方法。
DeviceListPreferenceFragment是藍牙設備列表,點擊其中一個藍牙設備,開始藍牙的連接過程。
調(diào)用onDevicePreferenceClick方法,接著調(diào)用BluetoothDevicePreference的onClicked方法,開始連接,以及連接前的狀態(tài)檢測。
獲取mCachedDevice的綁定狀態(tài),
pair方法會調(diào)用CachedBluetoothDevice.startPairing,啟動配對
createBond調(diào)用BluetoothDevice.createBond方法,BluetoothDevice.createBond接著調(diào)用IBluetooth.createBond方法,下面會調(diào)用藍牙遠程服務。
和藍牙掃描一樣,實現(xiàn)IBluetooth接口的類是AdapterServiceBinder,
AdapterServiceBinder實現(xiàn)IBluetooth.Stub接口,并且是AdapterService的私有內(nèi)部類, AdapterServiceBinder接受事件,都會轉(zhuǎn)交AdapterService處理 ,所以IBluetooth.createBond方法會調(diào)用AdapterService.createBond方法。
createBond方法會檢查一下遠程設備屬性信息,再次取消藍牙掃描任務,將配對任務轉(zhuǎn)交mBondStateMachine,由狀態(tài)機處理該信息。
BondStateMachine狀態(tài)機的初始狀態(tài)是StableState,所以BondStateMachine.CREATE_BOND由StableState處理,StableState在processMessage中調(diào)用BondStateMachine.createBond方法
createBondNative方法實現(xiàn)com_android_bluetooth_btservice_AdapterService.cpp中
在上一篇中有介紹了Wifi與網(wǎng)絡連接處理
Android開發(fā)之WiFi與網(wǎng)絡連接處理
下面,來繼續(xù)說說Android中藍牙的基本使用。
Bluetooth是目前使用的最廣泛的無線通訊協(xié)議之一,主要針對短距離設備通訊(10米),常用于連接耳機、鼠標和移動通訊設備等。
值得一提的是:
android4.2新增了部分新功能,但是對于Bluetooth熟悉的人或許開始頭疼了,那就是Android4.2引入了一個新的藍牙協(xié)議棧針BLE。谷歌和Broadcom之間的合作,開發(fā)新的藍牙協(xié)議棧,取代了基于堆棧的Bluez。因此市場上出現(xiàn)了老設備的兼容問題,很多藍牙設備在android4.2手機上不能正常使用。
BluetoothAdapter簡單點來說就是代表了本設備(手機、電腦等)的藍牙適配器對象。
first:we need permission
要操作藍牙,先要在AndroidManifest.xml里加入權限
**下面來看看如何使用藍牙。 **↓↓↓****
Demo已就緒:
返回值:如果設備具備藍牙功能,返回BluetoothAdapter 實例;否則,返回null對象。
打開藍牙設備的方式:
1.直接調(diào)用函數(shù)enable()去打開藍牙設備 ;
2.系統(tǒng)API去打開藍牙設備,該方式會彈出一個對話框樣式的Activity供用戶選擇是否打開藍牙設備。
注意: 1.如果藍牙已經(jīng)開啟,不會彈出該Activity界面。2.在目前大多數(shù)Android手機中,是不支持在飛行模式下開啟藍牙的。如果藍牙已經(jīng)開啟,那么藍牙的開關 ,狀態(tài)會隨著飛行模式的狀態(tài)而發(fā)生改變。
1. 搜索藍牙設備
使用BluetoothAdapter的startDiscovery()方法來搜索藍牙設備
startDiscovery()方法是一個異步方法,調(diào)用后會立即返回。該方法會進行對其他藍牙設備的搜索,該過程會持續(xù)12秒。該方法調(diào)用后,搜索過程實際上是在一個System Service中進行的,所以可以調(diào)用cancelDiscovery()方法來停止搜索(該方法可以在未執(zhí)行discovery請求時調(diào)用)。
系統(tǒng)開始搜索藍牙設備
^( *  ̄(oo) ̄ ) ^ 系統(tǒng)會發(fā)送以下三個廣播:
2.掃描設備
3.定義廣播接收器接收搜索結果
4.注冊廣播
獲取附近的藍牙設備
第一步建立連接:首先Android sdk(2.0以上版本)支持的藍牙連接是通過BluetoothSocket建立連接,服務端BluetoothServerSocket和客戶端(BluetoothSocket)需指定同樣的UUID,才能建立連接,因為建立連接的方法會阻塞線程,所以服務器端和客戶端都應啟動新線程連接。
(這里的服務端和客戶端是相對來說的)
兩個藍牙設備之間的連接,則必須實現(xiàn)服務端與客戶端的機制。
當兩個設備在同一個RFCOMM channel下分別擁有一個連接的BluetoothSocket,這兩個設備才可以說是建立了連接。
服務端設備與客戶端設備獲取BluetoothSocket的途徑是不同的。
1,服務端設備是通過accepted一個incoming connection來獲取的,
2,客戶端設備則是通過打開一個到服務端的RFCOMM channel來獲取的。
服務端
通過調(diào)用BluetoothAdapter的listenUsingRfcommWithServiceRecord(String, UUID)方法來獲取BluetoothServerSocket(UUID用于客戶端與服務端之間的配對)
客戶端
調(diào)用BluetoothService的createRfcommSocketToServiceRecord(UUID)方法獲取BluetoothSocket(該UUID應該同于服務端的UUID)。
調(diào)用BluetoothSocket的connect()方法(該方法為block方法),如果UUID同服務端的UUID匹配,并且連接被服務端accept,則connect()方法返回。
數(shù)據(jù)傳遞,通過以上操作,就已經(jīng)建立的BluetoothSocket連接了,數(shù)據(jù)傳遞無非是通過流的形式
獲取流
該類就是關于遠程藍牙設備的一個描述。通過它可以和本地藍牙設備---BluetoothAdapter連接通信。
好多東西我也不知道怎么描述,下面給出Demo:
剛好有剛學習的小伙伴問我ListView怎么用,那我就用ListView。
源碼:
RairDemo
GitHub:
Coding:
轉(zhuǎn) ;utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-2
android設備在連接藍牙鍵盤時,由于系統(tǒng)檢測到鍵盤類型發(fā)生了改變,會關閉當前Activity并重新執(zhí)行oncreate啟動Activity,導致界面發(fā)生不可預估問題。
只需要在Manifest中的指定Activity加入configChanges屬性
android:configChanges="fontScale|keyboard|keyboardHidden|locale|orientation|screenLayout|uiMode|screenSize|navigation"
其中keyboard表示鍵盤類型發(fā)生了改變,比如用戶使用了外接鍵盤。
而在實際測試過程中navigation屬性是否添加對界面也存在一定影響,需要一并添加。
加入這兩條屬性后連接鍵盤后就不會導致Activiy重啟。
syu android藍牙連接方法先展示代碼結構。
藍牙是一種無線數(shù)據(jù)與語音通信的開放性全球規(guī)范,它以低成本的短距離無線連接為基礎,可為固定的或移動的終端設備提供廉價的接入服務。
藍牙(Bluetooth)是一項短途無線電連接系統(tǒng),它可以將不同的電子器材連系起來。原理就好像收音機一樣,裝有藍牙的電子器材,可以接收外來的訊息,從而進行特定的指令。
藍牙簡介:
不過,藍牙不但可以接收,也都可以“傳送”,因此裝有藍牙的電子器材,能夠互相溝通?,F(xiàn)在,大部分的電腦配件,如打印機、熒幕等,都要接駁上電線,才可以互傳訊息,但藍牙透過其短途的接收系統(tǒng),便可以使這些配件在沒有駁線下,仍然能夠傳送指令,做到真正“無線”的世界。
頭藍技術實質(zhì)內(nèi)容是為固定設備或移動設備之間的通信環(huán)境建立通用的近距無線接口,將通信技術與計算機技術進一步結合起來,使各種設備在沒有電線或電纜相互連接的情況下,能在近距離范圍內(nèi)實現(xiàn)相互通信或操作。藍牙功能可以參考下面的操作打開使用,打開其他設備的藍牙。
并使其對其他設備可見,打開下拉頂簾,點擊藍牙圖標使其變?yōu)榫G色,跳出提示框,勾選對其他設備可見。點擊掃描,搜索到其他設備后,點擊該設備名稱,雙方點確定后配對成功。選擇要傳輸?shù)奈募?,共享通過藍牙即可傳輸文件。
分享文章:android連接藍牙,android連接藍牙鍵盤
本文地址:http://m.rwnh.cn/article48/phpchp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、網(wǎng)站建設、服務器托管、全網(wǎng)營銷推廣、標簽優(yōu)化、電子商務
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)