返回
顶部

修改密码

Android蓝牙开发的一些经验

+1

-1

收藏

+1

-1

点赞0

评论0

最近在实验室做项目,使用了Android的蓝牙开发,这里面有好多坑..所以还是希望能记下来这些东西和大家分享,不要再走我的老路了。先说一下背景,我是开发手机与带蓝牙的智能设备(蓝牙血压计、血糖仪、手环等)设备对接的APP。也就是说,在设备端没有什么可以操作的,手机负…

 

最近在实验室做项目,使用了Android的蓝牙开发,这里面有好多坑..所以还是希望能记下来这些东西和大家分享,不要再走我的老路了。


先说一下背景,我是开发手机与带蓝牙的智能设备(蓝牙血压计、血糖仪、手环等)设备对接的APP。也就是说,在设备端没有什么可以操作的,手机负责发起数据传输。

  1. 蓝牙连接,不需要配对

    由于被曾经使用蓝牙的思路所误导,一直以为使用蓝牙是必须一个配对的过程的。实际上不是这样。搜索到设备以后,直接去connect设备而不去配对,目前在我这里是没问题的,搜索到设备以后,可以直接用一下代码进行连接:

        final String SPP_UUID = 00001101-0000-1000-8000-00805F9B34FB;     
        UUID uuid = UUID.fromString(SPP_UUID);     
        BluetoothSocket socket;      
        socket = device.createInsecureRfcommSocketToServiceRecord(uuid);
    
        adapter.cancelDiscovery();  
        socket.connect(); 
    
       这里的UUID是比较好用的一个,设备都可以识别。
    
    1. startDiscovey有可能启动失败

      一般程序中会有两步:开启蓝牙开始寻找设备。之前我写的代码是用户按下按钮就直接顺序执行这两步,导致的结果就是经常性搜索失败。仔细看了一下API,发现adapter.startDiscovery()函数是有一个boolean返回值的,也就是说如果启动失败就返回false。这就解释了为什么会启动失败了:顺序执行了开启蓝牙-寻找设备的步骤,但是由于蓝牙还没有完全打开,就开始寻找设备,导致寻找失败。于是最后我把代码改成了这样,问题解决:

      adapter = BluetoothAdapter.getDefaultAdapter();     
      if (adapter == null)     
      {     
          // 设备不支持蓝牙      
      }     
      // 打开蓝牙      
      if (!adapter.isEnabled())     
      {     
          adapter.enable();
          adapter.cancelDiscovery();
      }    
      
      // 寻找蓝牙设备,android会将查找到的设备以广播形式发出去      
      while (!adapter.startDiscovery()){
          Log.e(BlueTooth, 尝试失败);
          try {
              Thread.sleep(100);
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
      }
      
    2. 接收数据转换

      使用socket.getInputStream接收到的数据是字节流,这样的数据是没法分析的。又由于一般来说厂家给的协议都是类似于FA 22 89 D0这样的十六进制数据,所以很多情况需要一个byte转十六进制String的函数:

      public static String bytesToHex(byte[] bytes) {
      char[] hexChars = new char[bytes.length * 2];
      for ( int j = 0; j < bytes.length; j++ ) {
          int v = bytes[j] & 0xFF;
          hexChars[j * 2] = hexArray[v >>> 4];
          hexChars[j * 2 + 1] = hexArray[v & 0x0F];
      }
      return new String(hexChars);}
      
      

扫一扫在手机打开

评论
已有0条评论
0/150
提交
热门评论
相关推荐
Android蓝牙开发
  • 近场通信
  • 2022-05-20 18:30
  • 5 0 0
+1
android 蓝牙分析
  • 近场通信
  • 2022-05-20 18:30
  • 10 0 0
+1
android4.0蓝牙使能的详细解析
  • 近场通信
  • 2022-05-20 18:30
  • 2 0 0
+1
Android 蓝牙API 之 BluetoothAdapter 类
  • 近场通信
  • 2022-05-20 18:30
  • 1 0 0
+1
android蓝牙源码分析
  • 近场通信
  • 2022-05-20 18:30
  • 5 0 0
+1
今日要闻
换一批
热点排行