Bluetooth蓝牙通信技术之旅

    xiaoxiao2022-07-05  219

    最近项目上需要蓝牙通信,由于以前没有接触过,所以折腾了一段时间,现在记录下蓝牙通信踩过的坑

     蓝牙是一种短距离无线通信技术,具有耗电量低、成本低、安全性、稳定性、易用性等优点

    文献:https://blog.csdn.net/DJY1992/article/details/10144843

    一:蓝牙的用法

     (一)蓝牙相关的权限

    <uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permissionandroid:name="android.permission.BLUETOOTH" />

     需要动态申请

    (二)蓝牙相关介绍:低功耗蓝牙和经典蓝牙

    (三)蓝牙相关的类:

    1:BluetoothAdapter 蓝牙适配器,是所有蓝牙交互的入口。它可以调用startDiscovery()方法开启扫描附件的蓝牙设备,    cancleDiscovery()取消扫描,通过注册广播BroadcastReceive来接受扫描到的设备,主要有如下功能

    (1)、开关蓝牙设备

    (2)、扫描蓝牙设备

    (3)、设置/获取蓝牙状态信息,例如:蓝牙状态值、蓝牙Name、蓝牙Mac地址等;

    2:BluetoothDevice表示远程的蓝牙设备,并用此类通过BluetoothSocket类可以请求连接远程设备,或查询这台设备的信息如其名称、 地址、绑定状态

    3:BluetoothServiceSocket    监听蓝牙连接的类 

         BluetoothSocket     蓝牙连接类

    (四)Android蓝牙代码:

         (1):注册蓝牙接收广播

    MyBroadcastReceiver receiver = new MyBroadcastReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(BluetoothDevice.ACTION_FOUND); intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); registerReceiver(receiver, intentFilter); IntentFilter statusFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); registerReceiver(mStatusReceive, statusFilter);

           (3):搜索蓝牙设备         BluetoothAdapter _bluetooth = BluetoothAdapter.getDefaultAdapter();        bluetooth.startDiscovery();

           4). 创建BluetoothSocket客户端对象,进行连接          BluetoothSocket socket = device.createRfcommSocketToServiceRecord(UUID.fromString(UUID号));          socket.connect();

      ( 5)利用socket获取输入流      BluetoothSocket socket = _serverSocket.accept();      InputStream inputStream = socket.getInputStream();

    二: 成熟的蓝牙框架:

          implementation 'com.inuker.bluetooth:library:1.4.0',这个框架封装了蓝牙的扫描,连接,获取输入流的数据并读取整个过程

    三: 分包:

        由于蓝牙底层规定每个包的长度最多20byte 要传送的数据很多 所以设备分了好多包

     

     

        

               

        

     

      

     

    最新回复(0)