android藍(lán)牙連接,android藍(lán)牙連接打印機(jī)調(diào)整黑體字

Android BLE藍(lán)牙連接異常處理

藍(lán)牙通信過程中異常很常見,大致有以下幾種:

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比納溪網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式納溪網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋納溪地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。

1,連接

2,發(fā)現(xiàn)服務(wù)

3,讀寫

4,通知

連接失敗可能是設(shè)備端原因,也可能是手機(jī)端原因。不同的手機(jī)來自不同的廠家,用的不同的芯片和藍(lán)牙協(xié)議棧都會導(dǎo)致藍(lán)牙功能的表現(xiàn)不一致,這都會導(dǎo)致各式各樣的兼容性問題,可能有的手機(jī)連接成功率高,有的成功率低。設(shè)備端原因可能有些時候出現(xiàn)異常導(dǎo)致死機(jī)無響應(yīng),或某些參數(shù)設(shè)置得有問題。但對于Android應(yīng)用層開發(fā)來說,能做的很有限,藍(lán)牙通信是在系統(tǒng)服務(wù)進(jìn)程中處理的,我們無法跨進(jìn)程改變系統(tǒng)的行為,如果是在一個進(jìn)程我們還可能通過Hook等手段來調(diào)整其內(nèi)在邏輯。另外應(yīng)用層的接口只是將請求封裝傳遞給系統(tǒng)服務(wù)進(jìn)程,并未做一些實質(zhì)性的通信,所以應(yīng)用層雖然是同一個進(jìn)程的,但是Hook意義也不大。所以我們能做的僅僅是看怎樣調(diào)整接口的調(diào)用,使得整體穩(wěn)定性更好一點而已。

連接失敗分兩種,一種是超時,一種是提前返回失敗。

關(guān)于超時,一般是設(shè)備不在周圍,或設(shè)備斷電未發(fā)廣播,或設(shè)備當(dāng)前被其他人連接。系統(tǒng)默認(rèn)超時為30s,通常返回133,我們也可以自己設(shè)置更短的超時時間,超時則closeGatt,然后重新連接。

關(guān)于提前返回失敗,一般是有明確的異常,可能是手機(jī)藍(lán)牙的異?;蛘咴O(shè)備異常。

這兩種情況建議closeGatt,延時500ms,然后重試。如果重試三次仍然失敗,則可以考慮提示用戶重啟手機(jī)藍(lán)牙,或者檢查設(shè)備是否正常工作。

還有一種情況,連接成功后沒過多久連接又?jǐn)嚅_了,這有可能是設(shè)備主動斷開,連接成功后有的設(shè)備會等待鑒權(quán),如果一定時間內(nèi)手機(jī)端還未發(fā)起鑒權(quán)則設(shè)備端主動斷開。也可能連接信道不夠穩(wěn)定導(dǎo)致斷開的,此時closeGatt并重新連接即可。

當(dāng)連接斷開時,會收到onConnectionStateChanged回調(diào),這個回調(diào)可能會有一定延時,甚至有5s以上。解決的辦法是輪詢,如每隔1s發(fā)起一次讀請求,如果連接斷了會立即返回失敗。

如果藍(lán)牙連接不穩(wěn)定,可以考慮關(guān)掉WIFI,因為WIFI通常和藍(lán)牙共用一個天線。

有的手機(jī)上discoverService可能會回調(diào)不止一次onServiceDiscover,這個要注意防御。

當(dāng)連接建立后,可以由設(shè)備端發(fā)起更改連接間隔,這樣能加快后續(xù)發(fā)現(xiàn)服務(wù)以及數(shù)據(jù)讀寫的速度。有的手機(jī)discover service很慢,原因是connect interval太大了,有的手機(jī)會主動向設(shè)備發(fā)起更改connect interval,而有的手機(jī)卻不會。這樣的話connect interval相差就會很大,實踐中發(fā)現(xiàn)有的手機(jī)是7ms,有的手機(jī)是默認(rèn)的50ms,所以發(fā)現(xiàn)service都要8s,甚至20s的都很尋常,這對用戶來說是無法忍受的。所以比較好的辦法是設(shè)備主動發(fā)起更改connect interval,而Android系統(tǒng)是沒有提供對應(yīng)API的。

如果發(fā)現(xiàn)服務(wù)失敗,通常來說不用closeGatt,重試一下就好了。如果重試三次還失敗,建議清一下緩存,再closeGatt,重新連接。

讀寫失敗要看失敗的原因是什么,如果是權(quán)限問題,則需要和設(shè)備端確認(rèn)是否開放了相應(yīng)的讀寫權(quán)限。也可能是要讀寫的character不存在,可能是設(shè)備端修改了固件,手機(jī)端需要刷新一下藍(lán)牙緩存,closeGatt再重新連接。如果是其它未知錯誤,則重試三次,仍然失敗則closeGatt。不過通常來說如果是因為連接出了問題導(dǎo)致讀寫失敗的,會收到onConnectionStateChanged回調(diào),此時就不用再無謂的重試了,直接closeGatt,重新連接。

打開/關(guān)閉character的notify,必須等收到onDescriptorWrite回調(diào)之后才算結(jié)束,才能開始下一個任務(wù)。

如果打開notify失敗,則可以改成周期性輪詢的方式去查詢character的值。

可參考該文章

Android-BLE-Issues

syu android藍(lán)牙連接方法

syu android藍(lán)牙連接方法:打開其他設(shè)備的藍(lán)牙,并使其對其他設(shè)備可見。打開下拉頂簾,點擊藍(lán)牙圖標(biāo)使其變?yōu)榫G色,跳出提示框,勾選對其他設(shè)備可見。

syu android判斷藍(lán)牙模塊是否開啟,blueadapter.isEnabled() true表示已經(jīng)開啟,false表示藍(lán)牙并沒啟用。

syu android啟動配置藍(lán)牙可見模式,即進(jìn)入可配對模式Intent in=newIntent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE)。

藍(lán)牙連接技術(shù)優(yōu)勢:

支持語音和數(shù)據(jù)傳輸;采用無線電技術(shù),傳輸范圍大,可穿透不同物質(zhì)以及在物質(zhì)間擴(kuò)散;采用跳頻展頻技術(shù),抗干擾性強(qiáng),不易竊聽;使用在各國都不受限制的頻譜,理論上說,不存在干擾問題;功耗低;成本低。藍(lán)牙的劣勢:傳輸速度慢。

藍(lán)牙的技術(shù)性能參數(shù):有效傳輸距離為10cm~10m,增加發(fā)射功率可達(dá)到100米,甚至更遠(yuǎn)。收發(fā)器工作頻率為2.45GHz ,覆蓋范圍是相隔1MHz的79個通道(從2.402GHz到2.480GHz )。

藍(lán)牙自動連接實現(xiàn)

1.當(dāng)藍(lán)牙配對成功連接時,斷開遠(yuǎn)程端設(shè)備會自動連接

2.當(dāng)設(shè)備長時間鎖屏?xí)?dǎo)致CachedBluetoothDevice自動清空,如果藍(lán)牙斷開就不會自動連接的處理

監(jiān)控藍(lán)牙斷開連接狀態(tài)時發(fā)生哪些改變媒體音頻與通話音頻(a2dp與hfp)

1.在com.android.bluetooth.btservice.AdapterProperties這個類中藍(lán)牙連接狀態(tài)

2.在com.android.bluetooth.a2dpsink.A2dpSinkStateMachine這個類中藍(lán)牙連接狀態(tài)

3.在com.android.bluetooth.hfpclient.HeadsetClientStateMachine這個類中藍(lán)牙連接狀態(tài)

廣播監(jiān)聽com.android.settings.bluetooth.DockEventReceiver

com.android.settings.bluetooth.LocalBluetoothPreferences存儲值

com.android.settings.bluetooth.DeviceProfilesSettings點擊斷開連接時取消保存

創(chuàng)建服務(wù)com.android.settings.bluetooth.BluetoothConnectService

藍(lán)牙自動連接完畢經(jīng)測試長時間滅屏重啟遠(yuǎn)距離斷開等場景再次檢測到之前連接設(shè)備時會自動連接

Android藍(lán)牙協(xié)議-藍(lán)牙配對與連接

藍(lán)牙設(shè)備在連接前,會先檢查設(shè)備是否已經(jīng)配對過,如果沒有則先配對,配對完成后,再開始連接。

藍(lán)牙連接開始于設(shè)備列表 DeviceListPreferenceFragment的onPreferenceTreeClick方法。

DeviceListPreferenceFragment是藍(lán)牙設(shè)備列表,點擊其中一個藍(lán)牙設(shè)備,開始藍(lán)牙的連接過程。

調(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)用藍(lán)牙遠(yuǎn)程服務(wù)。

和藍(lán)牙掃描一樣,實現(xiàn)IBluetooth接口的類是AdapterServiceBinder,

AdapterServiceBinder實現(xiàn)IBluetooth.Stub接口,并且是AdapterService的私有內(nèi)部類, AdapterServiceBinder接受事件,都會轉(zhuǎn)交AdapterService處理 ,所以IBluetooth.createBond方法會調(diào)用AdapterService.createBond方法。

createBond方法會檢查一下遠(yuǎn)程設(shè)備屬性信息,再次取消藍(lán)牙掃描任務(wù),將配對任務(wù)轉(zhuǎn)交mBondStateMachine,由狀態(tài)機(jī)處理該信息。

BondStateMachine狀態(tài)機(jī)的初始狀態(tài)是StableState,所以BondStateMachine.CREATE_BOND由StableState處理,StableState在processMessage中調(diào)用BondStateMachine.createBond方法

createBondNative方法實現(xiàn)com_android_bluetooth_btservice_AdapterService.cpp中

標(biāo)題名稱:android藍(lán)牙連接,android藍(lán)牙連接打印機(jī)調(diào)整黑體字
標(biāo)題鏈接:http://muchs.cn/article40/phjoho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名標(biāo)簽優(yōu)化、定制網(wǎng)站、網(wǎng)站設(shè)計公司搜索引擎優(yōu)化、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)