第二篇 蓝牙广播的数据解析。

蓝牙广播数据解析

从上一篇我们提到的那样我们从系统的接收到了 关于蓝牙数据的相关信息,蓝牙的设备对象、蓝牙信号、标准蓝牙广播数据包等数据。

==================================================================================================================


作为我们开发的场景来说,我们需要对我们的设备进行必要的过滤,但是这个过滤的数据来源除了广播数据包,好像是没有其他办法的。当然名字也还是那么靠谱的,会有系统的缓存的。

所以我们需要做一些蓝牙广播的数据的解析。说到蓝牙的数据的数据解析的问题,就不得不提关于蓝牙的数据结构,不过这个网上有很多,百度一下,出来的结果能吓死你,哈哈。毕竟度娘是厉害的。-------言归正传:
  蓝牙的数据结构采用的方式。这有一篇文章还不错的推荐给大家 

http://blog.chinaunix.net/uid-28852942-id-5176579.html

其实在我们android 开发的数据解析中 倒是没有说的那么复杂,比方来说,

0201060303f1fe03190000020a080aff0000000000000000041509efbbbfe5beaee699ba426561636f6ee6a0bc5a690

上方是一个蓝牙数据(这个数据是我随便弄得只是做为示范)

对于我们开发来说

我们知道这样的数据构成就OK了

  1. 020106
  • 这是一个完全的“最小单元有意义的蓝牙广播数据”了吧。
  • 02表示这个数据的长度,也就是Length.
  • 01表示这个信息的标识,也就是Tag.
  • 01后面开始就是这个数据含有真正的数据,
  • 此时需要注意的是02表示长度是除去自身以外的长度, 如果你要数字节个数的话 你需要加1
  1. 0303f1fe

  2. 03190000

  3. 020a08

  4. 0a ff 00 00 00 00 00 00 00 00 04

  5. 15 09 efbbbfe5beaee699ba426561636

其他的都是一样的 我就不做一一解析了。

所以我们解析这个数据的时候都是解析相关的TAG,然后可以拿到我们需要的数据,我记得刚刚开始的时候,我是拿着这个数据直姐用索引取值,结果我们的固件版本一升级,索引值变了。我那个写死的数据就完蛋了。结果当然是教育了啦。

提一些的是关于常见的Tag,01一般表示是否可连接的状态。08、09一般都是可以表示设备的名称。但是也有很多是不广播名称的。

好吧BB那么多贴上源码才是关键以下是源码:

public static class BTScanInfo {
       //数据库
       public BleDevice dev;
       public byte[] advt;
       public double rssi = -10000.0;
       public static final int
               BT_ADVT_FIELD_SHORT_SVC_UUID_MORE = 0x02,
               BT_ADVT_FIELD_SHORT_SVC_UUID_COMP = 0x03,
               BT_ADVT_FIELD_MANU_INFO = 0xFF,
               BT_ADVT_FIEFD_NAME_INFO = 0x09,
               BT_ADVT_FIEFD_SUPPROTS_INFO = 0xFF;

       public int svcMoreOffset = -1, svcMoreLen = -1,
               svcOffset = -1, svcLen = -1, isSupprots = 14,
               manuOffset = -1, manuLen = -1,
               nameOffset = -1, nameLen = -1,
               lightOffset = -1, lightLen = -1;


       public BTScanInfo(BleDevice dev_, byte[] advt_, double rssi_) {
           Log.i(dev_.getAddress(), "BtScanInfo==" + dev_.getAddress());
           dev = dev_;
           advt = advt_;
           rssi = rssi_;
           ParseAdvt();
       }
       public void ParseAdvt() {
           if (advt == null)
               return;
           for (int offset = 0 ; offset < advt.length ; ) {
               int fieldLen = (advt[ offset ] & 0xFF);
               if (fieldLen < 1) {
                   offset += fieldLen + 1;
                   // Log.v(TAG, "Find a invalid scan advert field length: " + fieldLen );
                   continue;
               }
               // a valid field.
               if (offset + fieldLen <= advt.length) {
                   int fieldType = advt[ offset + 1 ] & 0xFF;
                   if (fieldType == BT_ADVT_FIELD_SHORT_SVC_UUID_MORE) {
                       svcMoreOffset = offset;
                       svcMoreLen = fieldLen;
                   } else if (fieldType == BT_ADVT_FIELD_SHORT_SVC_UUID_COMP) {
                       svcOffset = offset;
                       svcLen = fieldLen;
                   } else if (fieldType == BT_ADVT_FIELD_MANU_INFO & fieldLen == BT_ADVT_FIEFD_NAME_INFO) {
                       manuOffset = offset;
                       manuLen = fieldLen;
                   } else if (fieldType == BT_ADVT_FIEFD_NAME_INFO) {
                       //获取到名字信息
                       nameOffset = offset;
                       nameLen = fieldLen;
                   }
               }
               offset += fieldLen + 1;
           }
       }

下一篇:关于蓝牙通信接口的相关介绍
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容