(Android)Ble連接穩(wěn)定性排坑

1. 藍(lán)牙相關(guān)權(quán)限(GPS)要先于BluetoothAdapter獲取

我的所有藍(lán)牙處理都放在一個(gè)Helper里,因此在Application里,我初始化了BluetoothAdapter,當(dāng)權(quán)限未授予時(shí)厕妖,我授予權(quán)限后,搜索藍(lán)牙則收不到藍(lán)牙廣播;于是我想著在權(quán)限打開(kāi)后雁佳,重新初始化BluetoothAdapter試試,結(jié)果發(fā)現(xiàn)也不行同云;BluetoothAdapter只能在權(quán)限滿足后再初始化才有效糖权;

2. 弱機(jī)型的適配;

有一些機(jī)型的藍(lán)牙芯片非常差炸站,比如三星的A7;差主要體現(xiàn)在剛連接后星澳,發(fā)送指令容易失敗,于是做了一套檢測(cè)機(jī)制來(lái)避免這個(gè)問(wèn)題

       BluetoothHelper.getInstance().connectBluetooth(address, (gatt, connect) -> {
            //收到成功回調(diào)時(shí)武契,開(kāi)始檢測(cè)
            if (connect) {
                startCheck();
            }

        });

startCheck()

   public void startCheck() {
        SUtils.saveBooleanData(context, SharePreConstant.CHECK_STABLE_SUC + address, false);
        sendCheck();
    }

在onServicesDiscovered回調(diào)后募判,存儲(chǔ) (SharePreConstant.CHECK_STABLE_SUC + address)的狀態(tài)荡含;如果為true,則發(fā)送指令:

    private void sendCheck() {
        boolean isBleStable = SUtils.getBooleanData(BaseApplication.getContext(), SharePreConstant.CHECK_BLE_STABLE_SUC + address);
        //弱藍(lán)牙芯片遲遲不給service回調(diào)届垫,沒(méi)辦法释液,只能斷開(kāi)重新連接
        if (!isBleStable) {
            tryCount++;
            if (tryCount > 5) {
                tryCount = 0;
                BluetoothHelper.getInstance().disconnectBle(true, address);
                safeConnect();
                return;
            }
            Logs.i("藍(lán)牙還沒(méi)有就緒");
            myHandler.postDelayed(() -> sendCheck(), 500);
            return;
        }
        Logs.i("藍(lán)牙已經(jīng)就緒");
        SUtils.saveBooleanData(BaseApplication.getContext(), SharePreConstant.CHECK_BLE_STABLE_SUC + address, false);

        //如果當(dāng)前藍(lán)牙不在dfu狀態(tài)下則發(fā)送驗(yàn)證指令,我把獲取電量當(dāng)作驗(yàn)證與心跳指令
        if (!BluetoothHelper.getInstance().checkDfu(bluetoothGatt.getDevice().getName())) {
            myHandler.postDelayed(() -> {
                Logs.empty();
                byte[] checkBattery = {BleCommand.GET_BATTERY};
                BluetoothHelper.getInstance().writeCharacteristicByAddress(checkBattery, address, true);
                checkSuc();
            }, 200);
        }

    }

當(dāng)藍(lán)牙返回BleCommand.GET_BATTERY的值時(shí)装处,則判斷為成功:

    /**
     * 檢查是否成功
     */
    private void checkSuc() {
         boolean isChecked = SUtils.getBooleanData(context, SharePreConstant.CHECK_STABLE_SUC + address);
            if (isChecked) {
                myHandler.sendEmptyMessageDelayed(MSG_CANCEL_DIALOG, 300);
                myHandler.sendEmptyMessageDelayed(MSG_BLE_CONNECTED, 500);
            } else {
                tryCount++;
                //如果多次未收到消息误债,則斷開(kāi),重新連接
                if (tryCount > 5) {
                    tryCount = 0;
                    BluetoothHelper.getInstance().disconnectBle(true, address);
                    safeConnect();
                    return;
                }
                sendCheck();
            }
    }

藍(lán)牙app外包請(qǐng)找我:505709544

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妄迁,一起剝皮案震驚了整個(gè)濱河市寝蹈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌登淘,老刑警劉巖箫老,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異黔州,居然都是意外死亡耍鬓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)流妻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)牲蜀,“玉大人,你說(shuō)我怎么就攤上這事绅这』链铮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵证薇,是天一觀的道長(zhǎng)度苔。 經(jīng)常有香客問(wèn)我,道長(zhǎng)棕叫,這世上最難降的妖魔是什么林螃? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮俺泣,結(jié)果婚禮上疗认,老公的妹妹穿的比我還像新娘。我一直安慰自己伏钠,他們只是感情好横漏,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著熟掂,像睡著了一般缎浇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赴肚,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天素跺,我揣著相機(jī)與錄音二蓝,去河邊找鬼。 笑死指厌,一個(gè)胖子當(dāng)著我的面吹牛刊愚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播踩验,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鸥诽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了箕憾?” 一聲冷哼從身側(cè)響起牡借,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎袭异,沒(méi)想到半個(gè)月后钠龙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扁远,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年俊鱼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刻像。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畅买。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖细睡,靈堂內(nèi)的尸體忽然破棺而出谷羞,到底是詐尸還是另有隱情,我是刑警寧澤溜徙,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布湃缎,位于F島的核電站,受9級(jí)特大地震影響蠢壹,放射性物質(zhì)發(fā)生泄漏嗓违。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一图贸、第九天 我趴在偏房一處隱蔽的房頂上張望蹂季。 院中可真熱鬧,春花似錦疏日、人聲如沸偿洁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)涕滋。三九已至,卻和暖如春挠阁,著一層夾襖步出監(jiān)牢的瞬間宾肺,已是汗流浹背溯饵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锨用,地道東北人瓣喊。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像黔酥,于是被迫代替她去往敵國(guó)和親藻三。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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

  • Android平臺(tái)支持藍(lán)牙網(wǎng)絡(luò)協(xié)議棧跪者,實(shí)現(xiàn)藍(lán)牙設(shè)備之間數(shù)據(jù)的無(wú)線傳輸棵帽。本文檔描述了怎樣利用android平臺(tái)提供的...
    Camming閱讀 3,303評(píng)論 0 3
  • 最近項(xiàng)目使用藍(lán)牙,之前并沒(méi)有接觸渣玲,還是發(fā)現(xiàn)了很多坑逗概,查閱了很多資料,說(shuō)的迷迷糊糊忘衍,今天特查看官方文檔逾苫。 說(shuō)下遇到的...
    King9527閱讀 1,790評(píng)論 0 1
  • 初識(shí)低功耗藍(lán)牙 Android 4.3(API Level 18)開(kāi)始引入Bluetooth Low Energy...
    JBD閱讀 112,584評(píng)論 46 342
  • Guide to BluetoothSecurity原文 本出版物可免費(fèi)從以下網(wǎng)址獲得:https://doi.o...
    公子小水閱讀 7,935評(píng)論 0 6
  • 趣店上市引起了很多人的關(guān)注,接下來(lái)的金融科技類公司中螞蟻金服枚钓、京東金融铅搓、陸金所、融360搀捷、拍拍貸也加速了上市的步伐...
    秦時(shí)明月V閱讀 3,559評(píng)論 6 6