android ble常見問題收集

1.oppo ble難掃描的問題

oppo 手機只掃描一次,所以經(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è)置以上屬性,否則會寫入失?。?/p>

wirteGattCharacteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);

3.藍牙多次連接問題

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

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

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

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

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

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

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

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

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

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

5.提高連接成功概率

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

6.連接間隔時間修改

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

requestConnectionPriority(intconnectionPriority)

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

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

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

CONNECTION_PRIORITY_LOW_POWER:2.//低功耗值

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

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

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

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

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

9.連接間隔修改方法:

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

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

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

requestConnectionPriority(intconnectionPriority)

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

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

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

CONNECTION_PRIORITY_LOW_POWER:2.//低功耗值

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

10.掃描時不能做太多的事情:

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

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

device.connectGatt(this, false, mGattCallbacks);

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

為true??自動連接,只要藍牙設(shè)備變得可用

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

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

GATT_NO_RESOURCES = -128 or 128;

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

GATT_ERROR = -123 or 133;//連接異常報133

GATT_ALREADY_OPEN = -115 or 141

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容