Android App向藍牙設備發送檔案資料,因為我們的藍牙設備一次接收最大200位元組,所以我把檔案資料是分成200位元組一個包,分包發送。
但是如果連續發送資料,會發生寫入資料失敗的情況。
網上說兩次發送之間需要間隔一點時間。所以我現在隔500毫秒發送一個包,但發現太慢了。
試了把間隔時間減到100毫秒,也會出現寫入資料失敗的錯誤。
改到了200毫秒,倒不會出現這種情況了。
不過感徑訓是很慢。計算了一下,如果發送一個5M的檔案,那大約需要花費87分鐘。
因為是首次做向藍牙設備發送檔案資料,所以不清楚這是不是正常的啊。請大佬們幫忙解答一下我的疑惑
uj5u.com熱心網友回復:
你這是上一個包發送并接收成功才發下一個包嗎?uj5u.com熱心網友回復:
200個位元組,頭部這么長可以理解,資料包還200個位元組....uj5u.com熱心網友回復:
剛發現200毫秒也會出錯
現在改成了300毫秒,發送了3.45M的檔案在測驗。。。

那如果300毫秒可以的話,發送5M的檔案就大概需要131分鐘了
uj5u.com熱心網友回復:
參考https://blog.csdn.net/sinat_19628093/article/details/51890827?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control。而且藍牙傳輸也有速率問題,大概160kb/s的上限。
uj5u.com熱心網友回復:
哈哈哈,你要逗死我了,每次接收200位元組肯定有問題啊
uj5u.com熱心網友回復:
啊,沒有哎,我直接間隔300毫秒就發送下一個包,是不是應該等上一個包發送成功才發送下一個包啊?
uj5u.com熱心網友回復:
是這樣的,之前有發送幾個指令的,最后一步進入到發送檔案資料,就直接發送檔案資料了
uj5u.com熱心網友回復:
我使用的庫是:com.clj.fastble:FastBleLib:2.3.4,之前也試過修改mtu,修改了mtu為203,想著一次就能發送200個位元組,但結果還是一次發送20個位元組,不知道是哪里沒做對,還是說和藍牙設備也有關系的呀?
uj5u.com熱心網友回復:
是有關系的,藍牙協議不僅僅要看你發的多少,還要看對方吃多少。串口通信就是這樣,雙方協議要一致。uj5u.com熱心網友回復:
這就應該是設備問題了,接收量太小了吧
uj5u.com熱心網友回復:
哦哦,好的明白了,謝謝。
我之前和硬體工程師溝通過,他說Android有這個20位元組的限制,就讓我分包按20個位元組發送好了

我再跟他溝通看看
uj5u.com熱心網友回復:
啊啥意思,沒懂

我沒有每次接收200位元組啊。硬體工程師告訴我藍牙設備一次發送的資料不超過247個位元組,所以他們規定每200個位元組發送一個包,直到把所有資料發送完畢。但是Android系統好像有限制,最多只能發送20個位元組吧。然后我設定過mtu也沒用,我使用的庫本身會把資料直接分成20個位元組發送出去
uj5u.com熱心網友回復:
哦哦,好的,那我跟硬體溝通一下,感謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/261161.html
標籤:Android
上一篇:根據色值,如何判斷屬于哪一類顏色
下一篇:求助
