近日,国家版权局版权管理司就网络音乐版权有关问题约谈了环球音乐、华纳音乐、索尼音乐等二十余家境内外音乐公司。版权管理司负责人强调,希望各音乐公司遵守版权法律法规和国际条约,抵制各种音乐侵权行为。要促进网络音乐全面授权、广泛传播,避免授予网络音乐服务商独家版权;要遵循公平合理原则,不许可、纵容、挑动网络音乐服务商哄抬授权价格、恶性竞争。
又到周五,明天就是周末啦,提前祝大家周末愉快!
本篇来自 艾神一不小心 的投稿,介绍了自己封装的蓝牙库,希望对大家有所帮助!
艾神一不小心 的博客地址:
http://www.jianshu.com/u/f2a928cacb8d
由于上半年公司发展迅猛,空闲时间有限,转眼已几个月未更新文章了,但是期间本人还是优化了一些蓝牙库中的接口,包括 增加了OTA升级接口、连接超时提醒等接口、自定义注解代替之前的枚举(设备连接状态等)、解决了蓝牙管理类的连接设备数量错误BUG 等等,接着上篇BLE蓝牙详细解读咱们继续,未看过的朋友可以先去参考
Android BLE蓝牙详细解读(二)
http://www.jianshu.com/p/0c6aedd6640b
下面主要分析本人蓝牙库中的蓝牙操作
1、BluetoothLeService类 是整个蓝牙的核心功能实现,BleManager 是对外提供所有蓝牙操作接口的管理类,当 BluetoothLeService 处理之后要把结果返回到 BleManager 中,然后再由 BleManager 对外提供接口,他们之间通过 handler 进行连接起来,如下:
当 BluetoothLeService 中处理之后就会通知 BleManager 去处理状态改变,如下:
2、BleLisenter 中是所有的接口的一个集合,在这里把它定义为一个抽象类,因为考虑到有部分回调方法是可以不用必须实现的(如果各位有更好的方式可以留言提示,不胜感激)。
3、在此要注意一些细节,比如大多数设备扫描的时候会重复扫描到相同蓝牙设备,必须要进行过滤,开发应用时,必须还要进行产品过滤,比如通过设备的广播包过滤,或者通过设备名过滤都是可以的,如下(注意:要根据自己产品提供的广播包进行过滤,下图是我们自己产品的):
还有更重要的一个细节就是,在设备添加、移除或者连接状态发生改变时怎么样判断当前蓝牙对象是否是同一个对象(有点拗口),看下图:
可以看到 mBleFactory.create(BleManager.this,(BluetoothDevice) msg.obj) 返回了一个蓝牙对象,该方法最基本的实现如下:
这里就是判断当前已连接的蓝牙设备的集合中是否存在该设备,如果有直接返回该对象,如果没有则新创建一个蓝牙对象。
4、当设备连接成功之后并不代表就可以在此时发送数据,因为此时只是连接成功,并没有获取到蓝牙服务。必须要先通过 gatt对象 去获取服务 discoverServices() 才可以。如果想让APP内能够实时监听到蓝牙设备发来的数据,则还需要设置一个通知(可以理解成注册监听吧)如下:
5、该库中提供了简单的蓝牙自定义对象,并且用到的蓝牙设备是基于此自定义对象,如果想扩展更多蓝牙属性可以去继承并扩展它,所以为了更好的处理蓝牙对象的类型,库中定义了泛型类型。
新更新的OTA升级模块的接口还没有介绍,大家感兴趣可以去下载源码自己去查看,OK,要注意的细节问题已经介绍的差不多了,如果感兴趣的朋友可以大胆的去应用该库到自己的项目中。下篇准备更新一篇蓝牙3.0的文章(基于蓝牙音箱A2DP协议实现),感兴趣可以继续关注。附DEMO下载地址:
https://github.com/Alex-Jerry/BleDemo
每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。
如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。
欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号: