内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

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

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

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

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

1,連接

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

3,讀寫(xiě)

4,通知

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

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

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

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

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

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

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

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

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

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

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

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

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

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

可參考該文章

Android-BLE-Issues

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

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

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

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

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

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

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

藍(lán)牙自動(dòng)連接實(shí)現(xiàn)

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

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

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

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

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

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

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

com.android.settings.bluetooth.LocalBluetoothPreferences存儲(chǔ)值

com.android.settings.bluetooth.DeviceProfilesSettings點(diǎn)擊斷開(kāi)連接時(shí)取消保存

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

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

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

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

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

DeviceListPreferenceFragment是藍(lán)牙設(shè)備列表,點(diǎn)擊其中一個(gè)藍(lán)牙設(shè)備,開(kāi)始藍(lán)牙的連接過(guò)程。

調(diào)用onDevicePreferenceClick方法,接著調(diào)用BluetoothDevicePreference的onClicked方法,開(kāi)始連接,以及連接前的狀態(tài)檢測(cè)。

獲取mCachedDevice的綁定狀態(tài),

pair方法會(huì)調(diào)用CachedBluetoothDevice.startPairing,啟動(dòng)配對(duì)

createBond調(diào)用BluetoothDevice.createBond方法,BluetoothDevice.createBond接著調(diào)用IBluetooth.createBond方法,下面會(huì)調(diào)用藍(lán)牙遠(yuǎn)程服務(wù)。

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

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

createBond方法會(huì)檢查一下遠(yuǎn)程設(shè)備屬性信息,再次取消藍(lán)牙掃描任務(wù),將配對(duì)任務(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方法實(shí)現(xiàn)com_android_bluetooth_btservice_AdapterService.cpp中

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

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

廣告

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

外貿(mào)網(wǎng)站建設(shè)
西林县| 六盘水市| 桂东县| 南江县| 沁水县| SHOW| 乌鲁木齐县| 沈阳市| 彭山县| 清苑县| 永福县| 南川市| 宁远县| 本溪市| 都安| 安多县| 普格县| 林州市| 和林格尔县| 滁州市| 洪江市| 泌阳县| 山丹县| 志丹县| 夏河县| 洪泽县| 凯里市| 西宁市| 新干县| 龙井市| 望江县| 青铜峡市| 克山县| 绵阳市| 高邮市| 林州市| 杭锦后旗| 保山市| 丹阳市| 呼伦贝尔市| 棋牌|