首页 > 其他分享 >Android开发 - BluetoothDevice 类蓝牙连接、通信以及获取设备信息解析

Android开发 - BluetoothDevice 类蓝牙连接、通信以及获取设备信息解析

时间:2024-08-27 10:38:47浏览次数:5  
标签:BluetoothDevice 蓝牙 println device Android 配对 设备

BluetoothDevice 是什么

  • BluetoothDevice 是用于表示远程蓝牙设备的类。它提供了与设备进行连接通信以及获取设备信息的功能。在蓝牙通信中,BluetoothDevice 对象代表一个实际的物理设备,比如蓝牙耳机智能手表蓝牙音箱

BluetoothDevice 的主要作用

获取蓝牙设备的信息

  • 通过 BluetoothDevice 可以获取设备的一些基本信息,如名称MAC 地址(唯一标识符)设备类型

建立蓝牙连接

  • BluetoothDevice 提供了与远程蓝牙设备建立连接的功能,包括经典蓝牙连接低功耗蓝牙(BLE)连接

管理设备配对

  • 通过 BluetoothDevice 可以发起配对请求取消配对,以及管理已配对的设备

BluetoothDevice 的主要方法与属性

  • device.getAddress():得到远程设备蓝牙 MAC 地址MAC 地址是一个唯一的硬件标识符,用于识别蓝牙设备

    BluetoothDevice device = ...; // 已获取的 BluetoothDevice 对象
    String macAddress = device.getAddress();
    System.out.println("MAC 地址: " + macAddress);
    
    • 每个蓝牙设备都有一个唯一的 MAC 地址,类似于 AA:BB:CC:DD:EE 的格式。这个地址用于唯一标识蓝牙设备
  • device.createBond():发起与远程设备配对(绑定)请求

    BluetoothDevice device = ...; // 已获取的 BluetoothDevice 对象
    boolean isBonded = device.createBond();
    System.out.println("发起配对请求: " + (isBonded ? "成功" : "失败"));
    
    • 配对过程包括交换安全密钥确认设备身份,以确保设备之间可以进行安全通信
  • device.getBondState():获取设备绑定状态返回的状态可以是:BOND_NONE:未配对BOND_BONDING:正在配对BOND_BONDED:已配对

    BluetoothDevice device = ...; // 已获取的 BluetoothDevice 对象
    int bondState = device.getBondState();
    switch (bondState) {
        case BluetoothDevice.BOND_NONE:
            System.out.println("设备未配对");
            break;
        case BluetoothDevice.BOND_BONDING:
            System.out.println("正在配对中...");
            break;
        case BluetoothDevice.BOND_BONDED:
            System.out.println("设备已配对");
            break;
    }
    
    • 该方法用于检查设备当前配对状态,以便采取相应的操作(例如,提示用户设备已配对或需要重新配对)
  • device.connectGatt(Context context, boolean autoConnect, BluetoothGattCallback callback):用于连接远程设备上的 GATT 服务器(低功耗蓝牙设备)。这是一个 BLE 特有的方法

    BluetoothDevice device = ...; // 已获取的 BluetoothDevice 对象
    BluetoothGatt gatt = device.connectGatt(context, false, new BluetoothGattCallback() {
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
            if (newState == BluetoothProfile.STATE_CONNECTED) {
                System.out.println("已连接到设备");
            } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                System.out.println("设备已断开连接");
            }
        }
        // 其他回调方法省略...
    });
    
    • 该方法用于连接BLE 设备并与其进行通信BluetoothGattCallback 回调接口提供了一些回调方法处理连接状态数据交换
    • 参数解析
      • context:应用的上下文
      • autoConnect:如果为 true,则尝试自动连接设备
      • callback:用于处理 GATT 事件回调接口(如连接状态变化、特征读写等)
  • device.getType():获取蓝牙设备类型设备类型可能是:DEVICE_TYPE_CLASSIC:经典蓝牙设备(BR/EDR)DEVICE_TYPE_LE:低功耗蓝牙设备(BLE)DEVICE_TYPE_DUAL:同时支持经典蓝牙和低功耗蓝牙

    BluetoothDevice device = ...;
    int deviceType = device.getType();
    switch (deviceType) {
        case BluetoothDevice.DEVICE_TYPE_CLASSIC:
            System.out.println("设备类型: 经典蓝牙");
            break;
        case BluetoothDevice.DEVICE_TYPE_LE:
            System.out.println("设备类型: 低功耗蓝牙");
            break;
        case BluetoothDevice.DEVICE_TYPE_DUAL:
            System.out.println("设备类型: 双模设备");
            break;
    }
    
    • 了解设备类型可以帮助开发者确定如何与设备进行通信,以及选择合适的协议(如经典蓝牙或 BLE)

总结

  • BluetoothDevice蓝牙编程中核心类之一,它代表了一个远程蓝牙设备,并提供了与该设备交互各种方法和属性。通过 BluetoothDevice,可以获取设备信息管理设备连接配对、以及实现数据传输等功能

标签:BluetoothDevice,蓝牙,println,device,Android,配对,设备
From: https://www.cnblogs.com/ajunjava/p/18382180

相关文章

  • Android开发 - StringBuilder 类处理字符串解析
    StringBuilder是什么StringBuilder是Java中用于处理字符串的一个类。相较于String类,它更高效,尤其是在需要频繁修改字符串内容的场景下String的不可变性String是不可变的,也就是说,一旦创建了一个String对象,它的内容就无法再改变了。例如,执行以下代码时:Stringstr......
  • Android接收系统广播
    文章目录Android接收系统广播动态注册监听网络变化静态注册实现开机启动Android接收系统广播Android内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到各种系统的状态信息。比如手机开机完成后会发出一条广播,电池的电量发生变化会发出一条广播,时......
  • Android广播机制简介
    Android广播机制简介记得在我上学的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦有什么重要的通知,就会播放一条广播来告知全校的师生。类似的工作机制其实在计算机领域也有很广泛的应用,如果你了解网络通信原理应该会知道,在一个IP网络范围中,......
  • 腾讯地图SDK Android版开发 8 覆盖物示例2动画
    腾讯地图SDKAndroid版开发8覆盖物示例2动画动画相关的类和接口帧动画Animation动画Marker接口继承关系Animation接口类及其子接口类AnimationableIAnimationSetTencentMapComponent地图组件接口类Marker动画示例界面布局MapMarkAnimate类常量成员变量初始值创建......
  • Android Qcom USB Driver学习(九)
    高通的某些平台将电源管理移植到了ADSPSubsystem,分析一下其中比较关心的部分Architecture———————————————————————————————————————|GenericTypeCDrvierPowerSupplyFramework| |G......
  • 高德地图SDK Android版开发 8 覆盖物示例2动画
    高德地图SDKAndroid版开发8覆盖物示例2动画前言动画相关的类和接口帧动画MarkerOptionsAnimation动画Animation类及其子类AnimationTranslateAnimationRotateAnimationAlphaAnimationScaleAnimationAnimationSetMarker动画示例界面布局MapMarkAnimate类常量成员变......
  • 车载Android设备启动时间优化: 新手指南
    简介车载Android设备启动时间优化新手指南,共20个优化方向。涉及bsp、系统层、apk等。目录BSP相关:1.移除了Bootloader(U-Boot/LK等)和Linux内核中的调试命令,以节省初始化时间和镜像大小。出于调试和开发目的,Bootloader中的启动延迟以及Bootloader和Linux内核中......
  • Android fork 进程 process(init/Zygote/SystemServer)
    ##Android的init/Zygote/SystemServer Android手机先开机,init/Zygote/SystemServer,然后启动Framework,然后启动Launcher;【安装APP(PMS),】然后启动APP(AMS)。所有的Android应用进程都是有Zygote进程fork出来的。Android系统启动流程(一)解析init进程-http://blog.csdn.net/itach......
  • 计算机毕业设计django+vue基于Android的婚物语APP的设计与实现【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,智能手机已成为人们日常生活中不可或缺的一部分,特别是在婚嫁领域,移动应用以其便捷性、实时性和个性化服务的......
  • Android Content Provider最全面试题及参考答案(8万字长文)
    什么是ContentProvider?ContentProvider是Android系统中用于在不同应用程序之间共享数据的一种机制。它提供了一种统一的接口,使得不同的应用可以以标准的方式访问和操作特定类型的数据。ContentProvider就像是一个数据仓库的管理员,它负责管理数据的存储、检索、更新......