android ble常見問題收集

1.oppo ble難掃描的問題

oppo 手機(jī)只掃描一次,所以經(jīng)常掃不到

修改方式:開啟線程1秒執(zhí)行一次

scanLeDevice(false);

scanLeDevice(false);

scanLeDevice(true);

Runnable?runnable=newRunnable()?{

@Override

public?voidrun()?{

//TODO?Auto-generated?method?stub

//要做的事情

scanLeDevice(false);

scanLeDevice(true);

scanHandler.postDelayed(this,1000);

}

};

scanHandler.postDelayed(runnable,1000);//每兩秒執(zhí)行一次runnable.

2.ble循環(huán)寫入失敗

ble向設(shè)備循環(huán)寫入不需要設(shè)備回復(fù)的數(shù)據(jù)時(shí)需要設(shè)置以上屬性,否則會(huì)寫入失敗:

wirteGattCharacteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);

3.藍(lán)牙多次連接問題

通過使用if(gatt==null)來判斷gatt是否被創(chuàng)建過,如果創(chuàng)建過就使用gatt.connect();重新建立連接。

* 但是在這種情況下測(cè)試的結(jié)果是重新連接需要花費(fèi)很長的時(shí)間。

* 解決辦法是通過gatt = device.connectGatt(this, false, gattCallback);建立一個(gè)新的連接對(duì)象,很明顯這樣的速度要比上一種方法快很多

* 然而,多次創(chuàng)建gatt連接對(duì)象的直接結(jié)果是創(chuàng)建過6個(gè)以上gatt后就會(huì)再也連接不上任何設(shè)備,原因應(yīng)該是android中對(duì)BLE限制了同時(shí)連接的數(shù)量為6個(gè)

* 解決辦法是在每一次重新連接時(shí)都執(zhí)行一次gatt.close();關(guān)閉上一個(gè)連接。

* 有人說為什么不在gatt.disconnect();后加一條gatt.close();呢,原因是如果立即執(zhí)行g(shù)att.close();會(huì)導(dǎo)致gattCallback無法收到STATE_DISCONNECTED的狀態(tài)。

* 當(dāng)然,最好的辦法是在gattCallback收到STATE_DISCONNECTED后再執(zhí)行g(shù)att.close();,這樣邏輯上會(huì)更清析一些。

4.ble三星note3鏈接不上問題

1.ble三星note3必須在主線程中掃描 才能掃到

2.三星有很多代碼是要規(guī)范才能正常運(yùn)行的

5.提高連接成功概率

掃描到設(shè)備后,開線程停一會(huì)再連接,可以提高連接效率

6.連接間隔時(shí)間修改

ble 中requestConnectionPriority這個(gè)方法 修改設(shè)備連接參數(shù)(android5.0以上系統(tǒng)才有的api)

requestConnectionPriority(intconnectionPriority)

connectionPriority這個(gè)參數(shù)可以設(shè)置三個(gè)值:

CONNECTION_PRIORITY_BALANCED:0//默認(rèn)的值,ble建議的設(shè)備連接參數(shù)

CONNECTION_PRIORITY_HIGH:1//連接快的值,當(dāng)需要跟設(shè)備進(jìn)行大的數(shù)據(jù)傳輸時(shí)設(shè)置該值,當(dāng)傳輸完成后需要設(shè)置為CONNECTION_PRIORITY_BALANCED(如固件升級(jí)時(shí)可設(shè)置為該值)

CONNECTION_PRIORITY_LOW_POWER:2.//低功耗值

7.安卓4.3版本難連接解決方案:

經(jīng)測(cè)試發(fā)現(xiàn)安卓4.3版本每次掃描后再連接,容易連接,因此在測(cè)試界面加入版本的判斷,當(dāng)手機(jī)為4.3版本時(shí)先掃描再連接。

8.ble與設(shè)備進(jìn)行大量數(shù)據(jù)交互時(shí)(如ota升級(jí))容易斷開問題

app與設(shè)備進(jìn)行大數(shù)據(jù)交互時(shí),容易斷:

解決方法:修改設(shè)備的藍(lán)牙連接間隔在10-20ms

9.連接間隔修改方法:

1.設(shè)備中有做好接收app發(fā)送指令后修改的:根據(jù)設(shè)備商提供的協(xié)議往設(shè)備上發(fā)送連接間隔時(shí)間(如ti芯片就有該功能)

2.芯片廠商沒有的:在android5.0以上系統(tǒng)有:

ble 中requestConnectionPriority這個(gè)方法 修改設(shè)備連接參數(shù)

requestConnectionPriority(intconnectionPriority)

connectionPriority這個(gè)參數(shù)可以設(shè)置三個(gè)值:

CONNECTION_PRIORITY_BALANCED:0//默認(rèn)的值,ble建議的設(shè)備連接參數(shù)

CONNECTION_PRIORITY_HIGH:1//連接快的值,當(dāng)需要跟設(shè)備進(jìn)行大的數(shù)據(jù)傳輸時(shí)設(shè)置該值,當(dāng)傳輸完成后需要設(shè)置為CONNECTION_PRIORITY_BALANCED(如固件升級(jí)時(shí)可設(shè)置為該值)

CONNECTION_PRIORITY_LOW_POWER:2.//低功耗值

3.有些廠商會(huì)在大數(shù)據(jù)交互開始時(shí)主動(dòng)請(qǐng)求申請(qǐng)修改連接間隔

10.掃描時(shí)不能做太多的事情:

在BluetoothAdapter.startLeScan()的時(shí)候,在BluetoothAdapter.LeScanCallback.onLeScan()中不能做太多事情,特別是周圍的BLE設(shè)備多的時(shí)候,開發(fā)建議:在onLeScan()回調(diào)中只做盡量少的工作,可以把掃描到的設(shè)備,扔到另外一個(gè)線程中去處理,讓onLeScan()盡快返回

11.ble藍(lán)牙連接參數(shù)解析 device.connectGatt(this, false, mGattCallbacks);

device.connectGatt(this, false, mGattCallbacks);

主要是第二個(gè)參數(shù):為false??立刻發(fā)起一次連接

為true??自動(dòng)連接,只要藍(lán)牙設(shè)備變得可用

實(shí)測(cè)發(fā)現(xiàn),用false連接比較好,比較快, true會(huì)等個(gè)十幾秒甚至幾分鐘才會(huì)連接上。??開發(fā)過程中一般都是用false,掃描到bluetoothdevice之后,直接用false連接即可。

12.掃描到設(shè)備后,開線程停一會(huì)再連接,可以提高連接效率

GATT_NO_RESOURCES = -128 or 128;

GATT_INTERNAL_ERROR = -127 or 129; //搜索服務(wù)找不到報(bào)129

GATT_ERROR = -123 or 133;//連接異常報(bào)133

GATT_ALREADY_OPEN = -115 or 141

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Key Terms And Concepts 關(guān)鍵術(shù)語和概念 Here is a summary of key B...
    Jaesoon閱讀 2,452評(píng)論 0 5
  • 自己封裝的BLE庫(5.0以上) 這里不記錄具體代碼規(guī)則,后面會(huì)給出參考文章,別人已經(jīng)寫很詳細(xì)了,我就單純記錄下踩...
    冰川孤辰j(luò)s閱讀 4,846評(píng)論 1 11
  • 前言: 本文主要描述Android BLE的一些基礎(chǔ)知識(shí)及相關(guān)操作流程,不牽扯具體的業(yè)務(wù)實(shí)現(xiàn),其中提供了針對(duì)廣播包...
    幻影宇寰閱讀 5,405評(píng)論 6 19
  • 安卓4.3(API 18)為BLE的核心功能提供平臺(tái)支持和API,App可以利用它來發(fā)現(xiàn)設(shè)備、查詢服務(wù)和讀寫特性。...
    風(fēng)雨byt閱讀 14,109評(píng)論 3 43
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評(píng)論 18 139