久久久精品视频在线_免费在线a视频_在线看的黄色网址_懂色av粉嫩av浪潮av_艳妇乳肉豪妇荡乳av_国产午夜大地久久_国产在线观看免费播放_天堂视频免费看_久久精品女同亚洲女同13_各处沟厕大尺度偷拍女厕嘘嘘

當前位置: 首頁 >深度 > 正文

全球實時:安卓藍牙開發 Android低功耗藍牙總結

2023-06-27 03:57:14

hello大家好,我是城鄉經濟網小晟來為大家解答以上問題,安卓藍牙開發,Android低功耗藍牙總結很多人還不知道,現在讓我們一起來看看吧!

首先要搞清楚一點,我們在 Android 中通過 SDK 獲得的藍牙廣播包是經過底層的 SDK 給我們處理過的,是一個長度為 62 的字節數組。這個長度為 62 的字節數組是怎么來的呢?

想要搞清楚這個問題,首先我們要明白 iBeacon 向外發送的最原始的廣播包是什么樣的?


【資料圖】

首先我們要搞清楚一點,藍牙在向外發送數據的時候是分成兩個部分的一個就是普通的廣播包還有一個叫做應答包。這是藍牙協議的規定內容,針對于所有的藍牙設備(iBeacon 只是藍牙設備的一種)

需要注意的是,發送數據是從低位到高位一次發送,所以接收到的數據要返回來按字節拼接,例如接收到的MAC為 8b 03 00 b0 01 c2,那么實際的MAC為 c2:01:b0:00:03:8b

首先我們來看一下第一個藍牙廣播包(來自 iBeacon 設備),一共 59 個字節

04 3e 38 0d 01 13 00 01 8b 03 00 b0 01 c2 01 00 ff 7f af 00 00 00 00 00 00 00 00 00 1e 29個字節 02 01 06 1a ff 4c 00 02 15 fd a5 06 93 a4 e2 4f b1 af cf c6 eb 07 64 78 25 27 11 4c b9 c5 30個字節

第一行的內容可以認為是藍牙廣播包中的附帶信息,通過 Android SDK 是沒法看到的,第二行是對應我們 Android SDK 中收到的廣播包中的前一部分。

第一個字節是HCI Packet Type,04表示這是HCI Event;剩下的58bytes則是HCI Event的具體內容第二個字節是EventCode,3e是此事件的代碼;第三個字節是Parameter Length,0x38(十進制56)表示后面數據長度56bytes第四個字節是SubEvent,0d表示這是LE Extended Advertising Report;第五個字節是Num Reports,數值為011b 00這兩個字節代表Event Type,由于發送數據都是按字節發送以及從低位向高位發送,因此真實值是 001b01 表示這是隨機設備地址8b 03 00 b0 01 c2 是此設備的MAC,根據從低向高的發送規則,所以真實MAC是 c2:01:b0:00:03:8b01 代表首要廣播信道的帶寬00 代表次要廣播信道的帶寬,此處表示不使用次要信道ff 表示廣播SID7f 代表Tx Power的大小,此處是127dbmaf 代表RSSI的大小,此處是-81dbm00 00 代表周期廣播間隔00 代表直接地址類型,次數是公共設備地址00 00 00 00 00 00 代表直接BD_ADDR1e 代表接下的的數據的字節數(長度),以下數據就是最重要的廣播數據了

上面的內容就是對應第一行的解釋了,其實 Android SDK 已經幫我們把這些數據中的部分內容解析出來,我們可以直接通過對應的 SDK 的方法來直接獲取。

下面我們再來看 真正意義上的廣播包

格式是這樣的:

一個廣播包是由若干個廣播單元 AD Structure 構成的。每個 AD Structure 的組成是:第一個字節表示長度值 length,表示接下來的 length 個字節是數據部分,數據部分的第一個字節表示數據的類型 AD Type,AD Type 決定了下面的數據代表了什么,關于每個數值代表的數據類型見官方文檔,剩下的 length - 1 個字節表示真正的數據

02 01 06 02 表示接下來的數據有兩個字節 01 表示數據類型,此處類型是 Flags 06 就是具體的數值了 0x06 = 0000 0110 每一位都有不同的含義,見官方文檔

1a ff 4c 00 02 15 fd a5 06 93 a4 e2 4f b1 af cf c6 eb 07 64 78 25 27 11 4c b9 c51a 表示接下來的數據有 26 字節FF 表示數據類型,此處類型是 廠商自定義數據類型(這里的廠商指的是蘋果公司,因為 iBeacon 是蘋果公司提出的)4C 00 表示公司的 ID,此處的 004C 代表蘋果公司02 15 Beacon 的標識位,必須是這樣的fd a5 06 93 a4 e2 4f b1 af cf c6 eb 07 64 78 25表示 Beacon UUID 27 11 是 major 的值4C b9 是 minor 的值C5 表示 Measured Power 表示的是此設備在 1 米處的 RSSI 值,用于距離測算

這段內容其實主要是蘋果公司在藍牙協議的基礎上定義的。

如果符合 1AFF4C000215 則說明此設備是 iBeacon 設備

04 3e 38 0d 01 1b 00 01 8b 03 00 b0 01 c2 01 00 ff 7f af 00 00 00 00 00 00 00 00 00 1e 29個字節02 0a 00 08 16 f0 ff 64 27 11 4c b9 11 09 4d 69 6e 69 42 65 61 63 6f 6e 5f 30 30 39 30 37 30個字節

其中第一行與上面一樣,這里不再介紹02 0a 00 02 表示接下來的數據長度 2 個字節0a 表示數據類型 這里表示 Tx Power Level 取值范圍是 -127 到 127 dBm00 表示 0 dBm08 16 f0 ff 64 27 11 4c b908 表示數據長度 16 表示 Service Data 由 Service UUID 和 service 數據組成 前兩個字節是 UUID 后面是數據f0ff 是 Service UUID 64 27 11 4c b9 是數據11 09 4d 69 6e 69 42 65 61 63 6f 6e11 表示數據長度09 表示設備完整的名字4d 69 6e 69 42 65 61 63 6f 6e 就是設備名字的 ASSIC 碼了 對應 MiniBeaconM i n i B e a c o n 5f 30 30 39 30 37這幾個數據就是 Beacon 開發者隨便亂加入的數據了,不符合協議內容

上面我們分別分析了藍牙原始數據包中的廣播包和應答包,其實對于 iBeacon 來說廣播包中的大多數內容其確定的,只有 UUID Major Minor 會有變化。而且每個位置所代表的作用都已經被 蘋果公司 定義好了。如果想要 iBeacon 發出的數據包有更多的內容,那么我們就可以在應答包中做文章了,應答包是有 32 個字節的。我們只需要按照協議的內容向應答包中添加數據就可以了。

對于 Android 客戶端,通過 Scanresult.getScanRecord().getBytes() 獲得的廣播包是 62 個字節,它把上面原始數據包中的內容提取出來了,只保留了第二行內容。就是 藍牙廣播包第二行(30 byte) 藍牙應答包第二行(最多 32 byte,數目不確定),如果位數不夠的話就用 0 補充。

所以我們現在就可以很好根據獲得的 byte[] 數組來解析廣播包了。

// 現在就獲得廣播包了byte[] result = ScanResult.getScanRecord().getBytes();// UUID 包含 result[9] 和 result[24]result[9]---result[24];// Majorresult[25] result[26]// Minorresult[27] result[28] // Measured Powerresult[29] // 一般我們都是直接會先把 廣播包轉成 16 進制的格式然后來截取String uuid = broadcast.substring(18, 50); // 至于后面應答包的內容就要根據具體的廣播包格式來進行解析了,比如你們公司的硬件開發人員把電池電量放入了里面,那么你們就約定好放在什么位置,到時候你直接取就可以了。

這幾個方法所獲得內容都不是直接從 Android 中收到的廣播(ScanResult.getScanRecord().getBytes())中解析出來的,而是從原始數據包中解析的。

getTxPower 獲取傳輸功率,如果這個 iBeacon 不支持的話,那么結果就是 127

后面這幾個方法作用不大,關鍵看設備是否支持

關鍵方法

ScanRecord 中的這幾個方法就很重要的,這幾個方法都和我們收到的廣播包有關系。

比如:如果應答包中對 Tx Power Level 進行了設置我們就可以通過 getTxPowerLevel() 來直接獲取。比如上面例子中的廣播包,通過調用方法 getTxPowerLevel() 就可以得到 0

其他方法類似,只要你的應答包中數據的格式正確,就可以解析出來。

舉例說明:

比如 Android 端收到的廣播包是:

0201061AFF4C0002150123456789ABCDEF0123456789ABCDEF00000007C5 廣播包020A00 0303F1FF 0E16F1FF6400000007AC233F66C401 070965526F7574650000 應答包

getTxPowerLevel() 返回 0 因為在應答包中有正確的格式數據 020A00

getServiceData() 也會返回值,因為在應答包中有對應的數據 0E16F1FF6400000007AC233F66C401

0E 表示數據長度16 表示類型 此處表示 Service Data - 16-bit UUID (不僅僅是 UUID 還帶有數據) 前兩個字節表示 UUID 后面是數據F1FF 表示 UUID6400000007AC233F66C401 表示數據 Map getServiceData() 返回的值就是用 UUID 和 數據作為鍵值對的形式此處返回的 Map 集合中的內容是 注意:變化的 UUID 其余位數不會變化,如果廣播包中 UUID 不是 F1FF,那么只需要對應替換就可以了ParcelUuid = ParcelUuid.fromString("0000fff1-0000-1000-8000-00805f9b34fb");byte[] 就是數據部分對應的字節數值

List getServiceUuids() 方法對應的就是應答包中的數據 0303F1FF 由于只出現一次,所以 list 的 size就只有一個就是 F1FF 對應的 ParcelUuid 就是 ParcelUuid.fromString("0000fff1-0000-1000-8000-00805f9b34fb");

同樣的下面幾個方法也是對 Android 端收到的 62 byte 的廣播包中數據的解析所得

String getDeviceName() 獲得是名字 需要廣播包中有對應的數據 070965526F7574650000

SpareArray getManufacturerSpecificaData() 獲取的制造商的數據,對應 4C000215

byte[] getManufacturerSpecificData(int manufacture) 根據制造商代碼(4c 對應的十進制)獲得byte[] (0215)

還是有一些字段翻譯過來不夠精細,詳細見官方文檔:www.bluetooth.com/specificati…

Android核心知識點筆記github:https://github.com/AndroidCot/Android

本文就為大家講解到這里,希望對大家有所幫助。

標簽:

返回頂部
www精品国产| 国产精品成人无码免费| 日韩av自拍偷拍| 亚洲天堂av中文字幕| 亚洲精品一区二三区| 麻豆tv在线播放| 免费观看污网站| 国产免费成人在线| 亚欧在线免费观看| 狠狠热免费视频| 受虐m奴xxx在线观看| 日本黄色一区二区三区| 中文字幕乱码视频| 国产成人免费观看视频| 国产网站免费在线观看| 免费网站永久免费观看| 91人妻一区二区三区蜜臀| 亚洲一区二区三区蜜桃| 亚洲18在线看污www麻豆| 你真棒插曲来救救我在线观看| 日本黄色小视频在线观看| 国产chinesehd精品露脸| 午夜精品久久久久久久91蜜桃| av中文字幕播放| 欧美日韩激情四射| 影音先锋资源av| 午夜视频在线播放| 欧洲女同同性吃奶| 成 人 免费 黄 色| jizz18女人| 国产极品国产极品| www.成人精品| 免费毛片一区二区三区| www成人免费| 国产精品无码网站| 中文有码在线播放| 日韩视频在线观看一区二区三区| 亚洲小视频在线播放| 亚洲一级av无码毛片精品| 亚洲自拍偷拍另类| 久久久久久久久久久久久久免费看 | 日本少妇一区二区三区| 亚洲国产成人无码av在线| 成人观看免费完整观看| 东方伊人免费在线观看| 日本r级电影在线观看| 天堂а√在线中文在线新版| 色七七在线观看| 水蜜桃在线免费观看| 中文字幕国产综合| 手机看片一区二区| 亚洲精品国产欧美在线观看| 三级性生活视频| 男人的天堂狠狠干| 精品人妻一区二区三区浪潮在线| 中文字幕 视频一区| 国产乱叫456在线| 国产色片在线观看| 午夜成人鲁丝片午夜精品| 一级片视频网站| 中国a一片一级一片| 中文字幕 日韩 欧美| 日本一区二区三区免费视频| 奇米影视亚洲色图| 欧美美女性生活视频| 4438x全国最大成人| 国产精品毛片一区二区在线看舒淇| 国产一级片免费观看| 日韩精品一区二区三区不卡| 三上悠亚作品在线观看| 人妻av一区二区| 蜜桃视频在线观看www| 91麻豆精品在线| 天天插天天操天天干| 国产精品自在自线| 北条麻妃视频在线| aa视频在线播放| 久久久无码中文字幕久...| 亚洲天堂精品一区| 亚洲一级中文字幕| 涩视频在线观看| 妞干网在线观看视频| 99久久精品日本一区二区免费| 特黄视频免费看| 在线免费黄色小视频| 亚洲天堂av线| 国产av麻豆mag剧集| 日本老太婆做爰视频| 影音先锋男人看片资源| 双性尿奴穿贞c带憋尿| 中国男女全黄大片| 无码国产色欲xxxx视频| www.黄色片| 国产av无码专区亚洲av| 亚洲一卡二卡在线观看| jizz国产在线| 一本到在线视频| 欧洲一级黄色片| 日本黄色一级网站| 成人午夜福利视频| 91福利在线观看视频| 色播视频在线播放| 在线一区二区不卡| 国产一二三区在线播放| 亚洲男女视频在线观看| av加勒比在线| 99久久久国产精品无码免费| 亚洲欧美精品一区二区三区| 亚洲美女性囗交| 日本xxxxx18| 欧美卡一卡二卡三| 91动漫免费网站| 97在线观看免费视频| 香蕉视频污视频| 国产人妻精品午夜福利免费| 丰满人妻熟女aⅴ一区| 午夜精品久久久久久久96蜜桃 | 国产一区二区麻豆| aaa在线视频| 黄色一区二区视频| 一二三区中文字幕| 99这里有精品视频| 国产黄色av片| 亚洲第一大网站| 天天舔天天干天天操| 五月天丁香视频| caopor在线| 国产ts丝袜人妖系列视频| 女~淫辱の触手3d动漫| 97在线观看免费视频| 午夜黄色福利视频| 538任你躁在线精品视频网站| 国产suv精品一区二区68| 青少年xxxxx性开放hg| 天天在线免费视频| 精品久久久久久久久久中文字幕| 男人的天堂狠狠干| 黄色片在线免费| 人妻无码视频一区二区三区| 日韩一区二区三区久久| 最新视频 - x88av| 天天操天天干天天舔| 中文字幕在线看人| 夜夜骚av一区二区三区| 性网爆门事件集合av| 午夜av免费在线观看| 亚洲一区二区三区综合| 中文字幕第24页| 欧美日韩一区二区三区电影| 久久精品无码中文字幕| 日本免费一级视频| 在线免费观看av网| 久久精品视频1| 97人妻精品一区二区三区动漫| 亚洲精品国产精品乱码不卡| 91人人澡人人爽| 亚洲国产天堂av| 欧美又粗又大又长| 免费 成 人 黄 色| 热久久久久久久久| 国产免费一级视频| 国产美女免费视频| wwwxxx色| 亚洲一二三四视频| 老司机激情视频| 黄色免费网址大全| 国产无码精品一区二区| 中文字幕网址在线| 亚洲av电影一区| av黄色免费网站| a级片一区二区| 999精品视频在线| 久久狠狠高潮亚洲精品| 国产一区二区女内射| 亚洲欧美激情一区二区三区| 少妇视频在线播放| 国产精品国产对白熟妇| 黄色永久免费网站| 综合激情网五月| 国产三级午夜理伦三级| 亚洲制服丝袜在线播放| 美女福利视频在线观看| av片中文字幕| 欧美福利视频一区二区| 国产色综合视频| 国产国语老龄妇女a片| 国精产品一区一区二区三区mba | 91丨九色丨蝌蚪丨对白| 亚洲av成人无码久久精品老人 | 日本高清视频网站| 亚洲性猛交xxxx乱大交| 日本免费黄色小视频| 欧美xxxxx在线视频| 四虎精品永久在线| 高h放荡受浪受bl| 波多野结衣一二三四区| 欧美在线观看www| 伊人久久综合视频| 天天干天天插天天操| 日本 欧美 国产| 精品久久久噜噜噜噜久久图片| 日韩精品久久久久久久| 亚洲精品福利网站| 女同久久另类69精品国产| 国产精品va无码一区二区| 影音先锋亚洲天堂| 天天摸天天干天天操| 在线观看黄网址| 亚洲福利精品视频| 欧美另类高清videos的特点| 95视频在线观看| 国产高清第一页| 国产一级久久久久毛片精品| 1024av视频| 男人天堂2024| 亚洲精品无码一区二区| 蜜桃视频一区二区在线观看| 久草视频在线免费看| 99热这里只有精品1| 国产在线免费av| 91热这里只有精品| 97在线视频人妻无码| 免费人成又黄又爽又色| 人妻有码中文字幕| 国产情侣免费视频| 久久久久久久久久久国产精品| 激情深爱综合网| 午夜精品免费观看| 久久精品一区二区免费播放| 波多野结衣之无限发射| 少妇久久久久久久| 给我看免费高清在线观看| 免费无码毛片一区二三区| 久久露脸国语精品国产91| wwwww在线观看| 大西瓜av在线| 自拍偷拍校园春色| 久久久亚洲av波多野结衣| 日韩毛片在线免费看| 一级片免费网站| 亚洲人做受高潮| 青青操国产视频| 中文字幕一二三区| 国产九九九九九| wwwwww在线观看| 一二三四国产精品| 久久综合在线观看| 亚洲av无码成人精品区| 日日摸日日碰夜夜爽无码| 久久午夜鲁丝片| 变态另类ts人妖一区二区| 亚洲18在线看污www麻豆| 欧美视频一二区| 17c丨国产丨精品视频| 国产成人精品一区二三区| 精品无码在线视频| 午夜激情福利在线| 成人高潮片免费视频| 亚洲天堂第一区| jizz国产在线观看| 欧美丰满老妇熟乱xxxxyyy| 亚洲美女爱爱视频| 免费看黄网站在线观看| 国产成人一区二区三区别| 天天干天天干天天操| mm131丰满少妇人体欣赏图| 污污网站在线观看视频| 午夜成人免费影院| aa在线观看视频| 91麻豆成人精品国产| 欧产日产国产v| youjizz在线视频| 极品尤物一区二区| 亚洲黄色三级视频| 美女100%露胸无遮挡| 久草视频精品在线| 97超碰在线资源| 免费在线一区二区三区| 国产一级淫片a| 30一40一50老女人毛片| 婷婷激情综合五月天| 无码国产69精品久久久久网站| 粗暴91大变态调教| 天堂中文在线观看视频| 黑人糟蹋人妻hd中文字幕| 精品久久久久久亚洲综合网站| 国产精品自拍合集| 国产又色又爽又黄又免费| 糖心vlog在线免费观看| 中文天堂在线资源| 日本xxxxx18| 国产麻豆免费观看| 日韩av高清在线看片| 精品人妻午夜一区二区三区四区| 无码人妻少妇伦在线电影| 国产成人精品毛片| 男人日女人视频网站| 草逼视频免费看| 日本网站免费在线观看| 成人1区2区3区| 成人免费无码av| 在线播放国产视频| 91丝袜超薄交口足| 国产伦理片在线观看| 成人精品在线看| 99热这里只有精品7| a毛片在线免费观看| 久久成人免费观看| 婷婷伊人综合中文字幕| 亚欧在线免费观看| 无码精品一区二区三区在线播放| wwww.国产| 熟女丰满老熟女熟妇| 欧美成人aaaaⅴ片在线看| 在线日韩国产网站| 在线观看免费中文字幕| www.av91| 特黄视频在线观看| 午夜免费福利在线| 丰满大乳奶做爰ⅹxx视频| 久热精品在线观看| 免费看日本黄色片| 一区二区视频播放| 欧美一区二区中文字幕| 亚洲色欧美另类| 天天操精品视频| 国产91在线播放九色| 亚洲天堂aaa| 凹凸国产熟女精品视频| 欧美老女人bb| 久草精品视频在线观看| 成年人网站在线观看视频| 国产又粗又猛又黄又爽| 日本一区二区黄色| 在线看黄色的网站| 啦啦啦免费高清视频在线观看| 路边理发店露脸熟妇泻火| 夜夜夜夜夜夜操| 精品一区二区三区蜜桃在线| 中文字幕免费在线看| 国产黄色一级网站| 国产精品久久久久久久无码| 中文字幕在线字幕中文| 中文字幕日韩精品无码内射| 日韩在线视频免费| 亚洲一区二区偷拍| 三级影片在线看| 精品人妻无码一区二区色欲产成人 | 亚洲不卡免费视频| 亚洲妇熟xx妇色黄蜜桃| 91精品久久久久久久久久久久| 亚洲视频在线观看一区二区 | 波多野结衣三级视频| 国产精品suv一区二区69| 极品久久久久久| 女人18毛片水真多18精品| caopor在线视频| 日本丰满大乳奶| 99热一区二区三区| 伊人亚洲综合网| 女人另类性混交zo| 欧美老女人性生活视频| 99精品久久久久久中文字幕| 不要播放器的av网站| 你懂得在线观看| 好吊色视频一区二区| 精品无码久久久久| 精品成在人线av无码免费看| 香蕉视频污视频| 中文字幕 视频一区| 色www免费视频| 国产精品丝袜一区二区| 少妇高潮久久久| 日本道在线观看| 黄色a级片免费| 男人天堂资源网| 天天干,夜夜爽| 精产国品一区二区| www.天天射.com| 欧美大片xxxx| 国产情侣久久久久aⅴ免费| 中文字幕1区2区3区| 九一精品久久久| 蜜臀精品一区二区| 波多野结衣av在线观看| 亚洲第一黄色片| 四虎成人永久免费视频| 亚洲五月天综合| 日本高清xxxx| 成人免费网站黄| 日本毛片在线观看| 在线视频一区二区三区四区| 中文字幕国产传媒| 大片在线观看网站免费收看| 手机在线看片日韩| 亚洲第一视频在线播放| 欧美激情黑白配| 亚洲高清在线免费观看| 视频一区二区视频| 波多野结衣a v在线|