大家好,好久没来发博客了。本篇将跟大家分享我在github上的一个开源项目,是关于安卓蓝牙开发的封装,包含蓝牙设备的搜寻、连接、通信,支持经典蓝牙和低功耗蓝牙,语言版本有Java和Kotlin两个版本。
其实说起来,这个项目早在2018年的时候就已经编写过一版了,只不过由于当时工作比较繁忙,搁置了很长一段时间,后面又没有去理会。直到今年换工作,有事没事看看github账户,偶然看到有一个开发者给我提了第一个issue,惊喜万分,提醒我应该重新拾起这个项目了,然后就重新优化了一下,更新至Github,并准备在csdn这里介绍一下使用方法。不过在介绍之前,我想先跟大家聊聊一个题外的问题,那就是:
大家都知道,Github上关于安卓蓝牙开发的开源框架已经很多了,也很成熟稳定了,像FastBle框架,很多人可能觉得其实没必要再去封装这么一个框架。但是其实我想说的是,很抱歉,我当时写这个项目的初衷,并不是为了给广大开发者运用到工作项目中去的,而是给更多的学习者或Android初学者提供一个学习入口,帮助他们更好更快速的理解掌握安卓蓝牙开发方面知识,并且到现在这个初衷一直没变。所以当时设计的时候,框架模块都是按照蓝牙开发通信流程来划分的,全部用安卓原生代码,并且没有过度封装,目的是为了让大家阅读源码的时候一目了然。
像Github上的很多开源框架封装得比较深或比较复杂,直接使用还可以,但不太适合初学者去学习蓝牙基础Api。另一方面,也是我觉得个人能力有限,所以我的定位就是将其作为一个学习开源作品,虽然定位没那么高,我还是会一直维护下去的。我的工作经历其实有大半是跟蓝牙开发相关的,在封装这个框架的过程中,我自己其实也加深了这一块知识,得到了益处。
好的,题外话说完了,下面开始跟大家讲一下这个开源项目的使用方法。
这个项目有两个语言版本,一个是Java,一个是Kotlin,Kotlin语言版本是近期才修改出来的,它跟Java版本其实没有区别,框架流程模块设计和API其实都是一样的,有的只是语法上的区别,所以大家根据需要选择就好了。
Java语言版本地址:https://github.com/g-HJY/HBluetooth
Kotlin语言版本地址:https://github.com/g-HJY/Kotlin-HBluetooth
以Java语言版本为例,讲讲这个项目的使用方法:
一、集成方式
首先是集成方式,当然你可以直接在github上将整个项目下载下来,也可以将其以依赖的形式集成到你的项目中,具体步骤如下:
1.在项目根目录的build.gradle文件中,添加如下配置:
allprojects { repositories { ... maven { url 'https://jitpack.io' } } }
2.在app module的build.gradle中,添加依赖:
dependencies { implementation 'com.github.g-HJY:HBluetooth:V1.0.3' }
看到依赖库成功依赖进来后,就可以开始调用啦。
二、使用介绍
1.第一步,使用前先实例化HBluetooth(全局单例),并且必须调用enableBluetooth()方法开启蓝牙功能:
HBluetooth.getInstance(this).enableBluetooth();
2.开启蓝牙能力后,接着你就可以开始进行蓝牙设备扫描,其中,type 为蓝牙设备类型(经典蓝牙或低功耗蓝牙):
HBluetooth.getInstance(this) .scanner() .scan(type, new ScanCallBack() { @Override public void onScanStart() { Log.i(TAG, "开始扫描"); } @Override public void onScanning() { Log.i(TAG, "扫描中"); } @Override public void onError(int errorType, String errorMsg) { } @Override public void onScanFinished(ListbluetoothDevices) { Log.i(TAG, "扫描结束"); if (bluetoothDevices != null && bluetoothDevices.size() > 0) { list.clear(); list.addAll(bluetoothDevices); adapter.notifyDataSetChanged(); } } }); 或者,如果你想在第一步 *** 作后直接进行扫描,则可以这样调用: HBluetooth.getInstance(this) .enableBluetooth() .scan(type, new ScanCallBack() { @Override public void onScanStart() { Log.i(TAG, "开始扫描"); } @Override public void onScanning() { Log.i(TAG, "扫描中"); } @Override public void onError(int errorType, String errorMsg) { } @Override public void onScanFinished(List bluetoothDevices) { Log.i(TAG, "扫描结束"); if (bluetoothDevices != null && bluetoothDevices.size() > 0) { list.clear(); list.addAll(bluetoothDevices); adapter.notifyDataSetChanged(); } } });
3.一旦扫描到设备,你就可以找到目标设备并连接:
HBluetooth.getInstance(this) .connector() .connect(device, new ConnectCallBack() { @Override public void onConnecting() { Log.i(TAG, "连接中..."); } @Override public void onConnected() { Log.i(TAG, "连接成功"); } @Override public void onDisConnecting() { Log.i(TAG, "断开连接中..."); } @Override public void onDisConnected() { Log.i(TAG, "已断开连接"); } @Override public void onError(int errorType, String errorMsg) { Log.i(TAG, "错误类型:" + errorType + " 错误原因:" + errorMsg); } });
4.设备连接成功后,你可以开始跟设备进行通信:
HBluetooth.getInstance(this) .sender() .send(new byte[]{0x01, 0x02}, new SendCallBack() { @Override public void onSending() { Log.i(TAG, "命令发送中..."); } @Override public void onReceived(DataInputStream dataInputStream, byte[] blevalue) { Log.i(TAG, "onReceived->" + dataInputStream + "---" + blevalue); } });
5.最后,调用以下方法去主动断开连接并释放资源 :
HBluetooth.getInstance(this).release();
使用方法到此就讲完了,关于框架内的源码也很简单,因为篇初已经讲过,此开源项目目的是为了方便大家理解学习这一块知识的,如果你之前有初略看过安卓蓝牙开发一些理论知识介绍或零散API,相信你很快可以理解并将全部知识内容贯穿起来,豁然开朗。
好了本篇就介绍到这里,谢谢大家!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)