哥们,我最近搞了个关于安卓蓝牙开发封装的开源项目。这玩意儿兼容老式蓝牙和低功耗蓝牙,用Java和其他几种语言编写。做这个主要是想帮新手和学习者们更好地弄懂安卓蓝牙怎么玩。初衷可不是为了填补市场的空缺,而是想让刚入行的小伙伴们有个学习的起点。下边,我得详细跟大家说说怎么用这个项目,还有我的一些想法。
一、为什么选择封装这个框架
我想到要搞个封装的框架开源语言安卓版,主要是因为做安卓蓝牙开发时发现,市面上的好东西不少,可对新手来说,那些框架太复杂了,理解起来也不容易。所以我想弄个简单好懂点的框架,让新手们更快学会蓝牙开发。所以设计框架的时候,我特别留意分的模块和代码的清晰度,希望每个新手读源码的时候都能感到做蓝牙开发的乐趣。
在这套体系中,我尽量不搞得太复杂,直接用安卓原生代码,让大家看清楚每一步的操作。虽然我水平有限,做不到完美,但想通过这个项目,激发大家对安卓蓝牙开发的兴趣。毕竟,学东西本身就是挺有意思的,这框架是我分享乐趣的一种方式。
二、我的开发经历与收获
我工作里相当一部分时间都在研究蓝牙这事儿。封装这个框架开源语言安卓版,主要是为了帮助别人,其实也让我自己对蓝牙有了更深的认识。在这一来一回的摸索里,我对蓝牙开发的玩意儿有了新的梳理,发现了好多之前没留意的细节。比如,蓝牙设备怎么连接,通信时注意事项那些,都是在弄框架的过程中慢慢领悟的。
而且,项目做着做着,我慢慢发现蓝牙开发不简单,特别在兼容各种蓝牙设备时,老碰上没想到的麻烦。这经历让我更有心把这套框架分享出去,希望帮到更多开发者,尤其是刚接触这个新领域的朋友们。
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
三、项目的基本使用方法
dependencies {
implementation 'com.github.g-HJY:HBluetooth:V1.3.6'
}
大家好,我来讲讲这个开源项目的用法。它有两种语言版本,Java和另一个版本,随便选一个你喜欢来开发。接入这框架特别容易,要么下全套项目,要么简单加上依赖到你的项目里即可。
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化 HBluetooth
HBluetooth.init(this);
}
}
用之前,先在你的应用里跑一遍初始化流程。然后,别忘了打开蓝牙功能,这可是关键一步。要是你用低功耗蓝牙,还得设置点东西,比如主要服务ID、读写特征的ID这类的。听着麻烦开源语言安卓版,但都是为了设备能顺畅连接和交流。
四、设备扫描与连接
//开启蓝牙功能
HBluetooth.getInstance().enableBluetooth()
完成了前面的步骤后,就来扫蓝牙设备。要选好是经典蓝牙还是低功耗蓝牙。找到设备后,连上它。一切搞定了,就可以跟设备聊天了。这整个操作就是围着连接和交流转的。
我操作过程中遇到点麻烦,像设备老断线、数据传得慢这些。这事儿挺闹心的,但也让我更懂蓝牙这行的门道。做这个项目就是想让大家以后遇到这些情况能更快解决。
五、持续优化与维护
//请填写你自己设备的UUID
//低功耗蓝牙才需要如下配置BleConfig,经典蓝牙不需要new HBluetooth.BleConfig()
HBluetooth.BleConfig bleConfig = new HBluetooth.BleConfig();
bleConfig.withServiceUUID("0000fe61-0000-1000-8000-00805f9b34fb")
.withWriteCharacteristicUUID("0000fe61-0000-1000-8000-00805f9b34fb")
.withNotifyCharacteristicUUID("0000fe61-0000-1000-8000-00805f9b34fb")
//命令长度大于20个字节时是否分包发送,默认false,分包时可以调两参方法设置包之间发送间隔
//.splitPacketToSendWhenCmdLenBeyond(false)
//useCharacteristicDescriptor 默认false
//.useCharacteristicDescriptor(false)
.setMtu(200, new BleMtuChangedCallback() {
@Override
public void onSetMTUFailure(int realMtuSize, BluetoothException bleException) {
Log.i(TAG, "bleException:" + bleException.getMessage() + " realMtuSize:" + realMtuSize);
}
@Override
public void onMtuChanged(int mtuSize) {
Log.i(TAG, "Mtu set success,mtuSize:" + mtuSize);
}
});
//低功耗蓝牙才需要调setBleConfig
HBluetooth.getInstance().setBleConfig(bleConfig);
一直都在给这个项目找bug还升级。前阵子有个哥们儿给我提出了第一个问题,心里还挺激动,也感觉这玩意儿还是挺有用的。咱这框架虽然不是顶级的,但我会继续调整,保证更多新手能靠它学好。
咱们得相信,随着时间发展,蓝牙技术肯定会越做越好,这个体系也会越来越完善。大家都来给些建议,让我们一起把项目做得更棒。毕竟,开源就是要大家一起来分享和帮忙,大家齐心协力,这个框架才能更好地帮到每个开发者。
HBluetooth.getInstance()
.scan(type, new ScanCallBack() {
@Override
public void onScanStart() {
Log.i(TAG, "开始扫描");
}
@Override
public void onScanning() {
Log.i(TAG, "扫描中");
}
@Override
public void one rror(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();
}
}
});
或者,如果你想在第一步操作后直接进行扫描,则可以这样调用:
HBluetooth.getInstance()
.enableBluetooth()
.scan(type, new ScanCallBack() {
@Override
public void onScanStart() {
Log.i(TAG, "开始扫描");
}
@Override
public void onScanning() {
Log.i(TAG, "扫描中");
}
@Override
public void one rror(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();
}
}
});
发表评论