最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android通過BLE傳輸文件遇到問題解決

 更新時間:2023年04月27日 10:57:49   作者:沉默王貳  
這篇文章主要為大家介紹了Android通過BLE傳輸文件遇到問題解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

1、遇到的問題

公司要通過Android設(shè)備給外圍設(shè)備的固件進行OTA升級,最開始想到的有兩種方案。

1、將當(dāng)前Android設(shè)備所連接 Wifi名稱,WiFi密碼通過BLE發(fā)送給外圍設(shè)備。 外圍設(shè)備拿到當(dāng)前環(huán)境的WiFi名稱和密碼連接熱點, 然后自己去服務(wù)器下載OTA文件,進行升級

2、當(dāng)前Android設(shè)備和外圍設(shè)備通過經(jīng)典藍牙進行傳輸OTA文件, 外圍設(shè)備拿到OTA文件進行升級

但是很遺憾,外圍設(shè)備既沒有WiFi芯片, 也沒有經(jīng)典藍牙芯片, 只有一顆BLE(低功耗藍牙)芯片。 這意味著上面的兩種方案都行不通。 那我們能不能通過BLE芯片來做文章, 來傳輸OTA文件?

BLE設(shè)計之初就是為了傳輸簡單的指令的, 傳輸一些小數(shù)據(jù)的, 每次發(fā)送的數(shù)據(jù)大小不能超過20個字節(jié)。到底靠不靠譜?。?/p>

2、 能不能通過BLE傳輸文件

讓我們來問問 GPT 吧

GPT 的回答, 是可以通過BLE傳輸文件的, 由于BLE 每次傳輸?shù)膬?nèi)容最大為20個字節(jié), 傳輸大文件時就需要分包傳輸, 同時需要確保分包傳輸?shù)目煽啃院头€(wěn)定性。

3、 如何傳輸文件

讓 GPT 給我們一些示例代碼

可以看出, 發(fā)送端分包批量發(fā)送數(shù)據(jù),接收端

4、如何保證可靠性和穩(wěn)定性

1、超時重傳

藍牙在傳輸過程中, 可能會存在丟包的情況。分兩種情況, 1、Android設(shè)備發(fā)送的數(shù)據(jù),外設(shè)設(shè)備沒有收到。 2、Android設(shè)備發(fā)送的數(shù)據(jù),外設(shè)設(shè)備收到了,并且發(fā)送了回復(fù)確認。 回復(fù)確認包Android設(shè)備卻沒有收到。

出現(xiàn)了這兩種情況的任意一種, 則認為發(fā)生了丟包的情況。 Android 對這個包進行重發(fā)。

2、序列號

針對超時重傳的第二種情況, 外設(shè)設(shè)備會收到兩個相同的包。 但是外設(shè)設(shè)備不清楚是不是重裝包。 這時就要給每個數(shù)據(jù)包添加序列號。 等外設(shè)設(shè)備收到兩個相同序列號的數(shù)據(jù)包時, 丟棄這個數(shù)據(jù)包, 回復(fù)Android設(shè)備收到此包, 開始發(fā)送下一個數(shù)據(jù)包。

3、數(shù)據(jù)校驗

BLE在傳輸?shù)倪^程中, 如果周圍環(huán)境有強藍牙干擾,或者其他傳輸通道, 可能會導(dǎo)致數(shù)據(jù)包變更, 所以需要在數(shù)據(jù)包添加一個校驗位, 這個校驗位根據(jù)特定的算法,由數(shù)據(jù)包的數(shù)據(jù)計算得來。 外設(shè)設(shè)備收到數(shù)據(jù)后, 重新計算校驗位, 判斷數(shù)據(jù)傳輸過程是否出現(xiàn)差錯, 如果計算的校驗位和包傳輸?shù)男r炍徊灰恢拢?則要求Android設(shè)備重新發(fā)送這個包。

5、 傳輸速度提升 RequestMtu

為了保證傳輸過程中的可靠性和穩(wěn)定性,我們需要在傳輸包中,添加序列號,數(shù)據(jù)校驗等信息。 Android默認每個BLE數(shù)據(jù)包不超過20個字節(jié),當(dāng)我們加了一些其他信息時, 每次傳輸?shù)挠行?shù)據(jù)可能只有15個字節(jié)左右。 導(dǎo)致在傳輸?shù)倪^程中分包更多, 傳輸時間更長。

為了提升傳輸?shù)乃俣龋?我們來提升BLE每個數(shù)據(jù)包的傳輸大小限制, 使每個分包可以傳輸更多的數(shù)據(jù)。 系統(tǒng)為我們提供了 RequestMtu這個接口。 需要在gatt連接成功時調(diào)用

    private val bluetoothGattCallback = object : BluetoothGattCallback() {
        override fun onConnectionStateChange(gatt: BluetoothGatt?, status: Int, newState: Int) {
            super.onConnectionStateChange(gatt, status, newState)
            if (newState == BluetoothGatt.STATE_CONNECTED) {
                Log.d(TAG, "gatt  連接成功")
                gatt?.requestMtu(40)
            } else {
                Log.d(TAG, "gatt  連接失敗 status $status  newstate $newState")
            }
        }
        override fun onMtuChanged(gatt: BluetoothGatt?, mtu: Int, status: Int) {
            super.onMtuChanged(gatt, mtu, status)
            if (BluetoothGatt.GATT_SUCCESS == status) {
                Log.d(TAG, "onMtuChanged suc : $mtu")
                gatt?.discoverServices()
            } else {
                Log.d(TAG, "onMtuChanged fail : $status")
            }
        }
    }

MTU改變成功后, 再去gatt.discoverServices()發(fā)現(xiàn)服務(wù)

參考:

http://www.fzitv.net/article/282668.htm

以上就是Android通過BLE傳輸文件遇到問題 解決的詳細內(nèi)容,更多關(guān)于Android BLE傳輸文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android開發(fā)之TimePicker控件用法實例詳解

    Android開發(fā)之TimePicker控件用法實例詳解

    這篇文章主要介紹了Android開發(fā)之TimePicker控件用法,結(jié)合實例形式詳細分析了Android項目的建立及TimePicker控件的具體使用技巧,需要的朋友可以參考下
    2016-02-02
  • Android自定義View的使用及其原理知識點總結(jié)

    Android自定義View的使用及其原理知識點總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于Android自定義View的使用及其原理知識點總結(jié)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2019-08-08
  • Android多級樹形列表控件

    Android多級樹形列表控件

    這篇文章主要為大家詳細介紹了Android多級樹形列表控件的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android實現(xiàn)Recycleview懸浮粘性頭部外加右側(cè)字母導(dǎo)航

    Android實現(xiàn)Recycleview懸浮粘性頭部外加右側(cè)字母導(dǎo)航

    這篇文章主要為大家詳細介紹了Android實現(xiàn)Recycleview懸浮粘性頭部外加右側(cè)字母導(dǎo)航,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Android APK反編譯圖文教程

    Android APK反編譯圖文教程

    學(xué)會反編譯比較關(guān)鍵,也是我們美化必須掌握技術(shù),學(xué)會反編譯也是實現(xiàn)制作ROM的起步,ROM高手必然是反編譯高手這里有必要說一下,教程只是給你一個動手的那一個蹺板,教程不是萬能的,給了你基礎(chǔ)與啟發(fā),最重要的是我們能夠自主的進行創(chuàng)新與思考
    2016-04-04
  • Android自定義照相機Camera出現(xiàn)黑屏的解決方法

    Android自定義照相機Camera出現(xiàn)黑屏的解決方法

    這篇文章主要介紹了Android自定義照相機Camera出現(xiàn)黑屏的解決方法,分析了黑屏出現(xiàn)的原因及參考解決方法,需要的朋友可以參考下
    2016-08-08
  • Android中OptionMenu用法實例

    Android中OptionMenu用法實例

    這篇文章主要介紹了Android中OptionMenu用法,實例分析了Android中OptionMenu創(chuàng)建操作的相關(guān)實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Android實現(xiàn)兩個數(shù)相加功能

    Android實現(xiàn)兩個數(shù)相加功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)兩個數(shù)相加功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Android 出現(xiàn)的警告(Service Intent must be explicit)解決辦法詳解

    Android 出現(xiàn)的警告(Service Intent must be explicit)解決辦法詳解

    這篇文章主要介紹了Android 出現(xiàn)的警告(Service Intent must be explicit)解決辦法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Flutter?fluro時報錯type?'String'?is?not?a?subtype?of?type?'Queue<Task>'

    Flutter?fluro時報錯type?'String'?is?not?a?subty

    這篇文章主要介紹了Flutter使用fluro時報錯type?'String'?is?not?a?subtype?of?type?'Queue<Task>'解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-12-12

最新評論

贺兰县| 静宁县| 布拖县| 陆河县| 通许县| 永胜县| 资溪县| 南皮县| 灯塔市| 黄山市| 汝南县| 永昌县| 九台市| 凤台县| 盘山县| 宁都县| 浦城县| 隆回县| 遂平县| 伊春市| 伊金霍洛旗| 黄陵县| 香格里拉县| 拜泉县| 辽宁省| 台山市| 文昌市| 方山县| 饶河县| 迁西县| 出国| 岳阳县| 南岸区| 阜平县| 通海县| 通河县| 新化县| 伊宁市| 康平县| 富源县| 舟山市|