Android之BLE(低功耗)蓝牙开发

这篇博客主要讲述了Android平台上的BLE低功耗蓝牙开发经验,包括遇到的UUID获取难题及解决方法。作者分享了一个开源库FastBle,并提供了连接蓝牙的工具类代码示例。文章强调了区分BLE与经典蓝牙的重要性,并预告了后续关于佳博和汉印打印机蓝牙开发的内容。欢迎大家留言交流UUID获取的优化技巧。
摘要由CSDN通过智能技术生成

       前段时间由于项目需要,针对部分热敏蓝牙打印机做了开发,本来刚开始是要用佳博的,结果开发完了说要换成汉印的打印机(此时内心一万只草泥马奔腾而过)。好了,言归正传。既然是蓝牙打印机,那么首先要做的就是进行蓝牙开发。先贴一个别人推荐的一个开源库:https://github.com/Jasonchenlijian/FastBle  话说在15年的时候有接触过原生的蓝牙开发,但是那时候并没有运用到项目中,当时给我的一个感觉就是再也不要做这个玩意儿了。没想到从今年(2019年)开始,一直在做这方面的项目,为了养家糊口只能硬着头皮上了。各种Google各种百度,最后还是没搞明白,那就放弃吧(怎么阔能,我是那么容易放弃的人吗(●'◡'●))。最后还是得感谢老天眷顾,我朋友他们也都在做这个,那就一起约个饭出来聊波技术咯~

    其实对于蓝牙开发,最难的不是网上能找到的那些东西,它的一个关键点就是它需要的那几个UUID怎么获取?从何而来?同样这也是困惑我良久的一个问题。(serviceUuid、 writeCharactUuid 、 notifyCharactUuid 这三个)。我问了好多人他们都说不知道,实际上这个应该是厂家那边应该提供过来的,但是厂家不是技术,他们根本都不知道这是什么玩意儿,好吧 ,我跪了。那是不是真的没有办法了?并不是,虽然我的办法有点不太靠谱,但是对于菜的要死又无知的自己来说,当然要抱着试一试的态度咯。

连接成功后拿到UUID集合然后进行遍历,将遍历得到的这些UUID一个一个赋值去试,终于皇天不负有心人,守得云开见月明,成功啦。o(* ̄▽ ̄*)ブ(PS:这么长时间的头发总算没有白掉)。

下面介绍一下完整步骤。

首先,清单文件中给权限(6.0以上一定要加定位权限):


<!-- 使用蓝牙的权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<!-- 扫描蓝牙设备或者操作蓝牙设置 -->
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!--模糊定位权限,仅作用于6.0+-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--精准定位权限,仅作用于6.0+-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

还有要添加

 <uses-feature
        android:name="android.hardware.bluetooth_le"
        android:required="true" />

 <service android:name="com.inuker.bluetooth.library.BluetoothService" />

然后就根据之前贴出的开源库进行开发就好了,我在这里贴一个工具类:

public class BleUtil {
    private static final String TAG = "BleUtil-->";
    private static BleUtil bleUtil;
    public List<BleDevice> bleDevices;
    private OnBleListener listener;
    private String uuid_service = "自己获取的";
    //接受数据特征UUID
    private String uuid_characteristic_receive = "自己获取的";
    //发送数据特征UUID(视情况而定,本人不需要发送数据功能)
//    private String uuid_characteristic_send = "自己获取的";
    private boolean isStandByBle;
    private boolean isEnableBle;
    private Context context;
    private Handler handler = new Handler(Looper.getMainLooper());
    private final int START_SCAN = 100;
    private final int RESET_CONNECT = 101;
//    private final UUID[] serviceUuids;
    private BleDevice connectedBleDevice;
    private BleScanRunnable bleScanRunnable;
    private BleResetConnectRunnable bleConnectRunnable;
    private BleManager bleManager;
    private BleConnectedRunnable bleConnectedRunnable;
    private boolean isResetConnect = false;
    private boolean isScaning;
    private final ReturnTimeOutRunnable returnTimeOutRunnable;
    private String currentData = "";
    private final ReceiveDataRunnable receiveDataRunnable;

    private BleUtil(Context context) {
 
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值