首页 > 编程语言 >Java Bluetooth 蓝牙通讯 BlueCove 扫描附近的蓝牙设备

Java Bluetooth 蓝牙通讯 BlueCove 扫描附近的蓝牙设备

时间:2025-01-08 19:10:38浏览次数:1  
标签:Java 蓝牙 BlueCove API Bluetooth public 设备

目录

BlueCove项目概述

BlueCove是一个开源的蓝牙协议栈实现,旨在为Java开发者提供一个全面的、易于使用的API,从而在应用程序中实现蓝牙功能。该项目支持多种操作系统,包括Windows、Linux和Mac OS X,并且能够与多种蓝牙硬件设备兼容。
BlueCove项目对这些协议的广泛支持,使得开发人员能够为不同类型的蓝牙设备开发应用程序,而不必担心兼容性问题。

BlueCove API架构

API的设计原则和实现方式

BlueCove API是一套Java语言的开源蓝牙API实现,它为Java应用提供了访问蓝牙设备和进行蓝牙通信的能力。API的设计遵循了Java的设备无关性原则,提供了一套统一的编程接口,使得开发者可以在不关心具体蓝牙硬件实现的情况下,编写跨平台的蓝牙应用。

API的实现主要依赖于底层的蓝牙硬件抽象层(HAL)来与蓝牙硬件进行交互。BlueCove使用Java本地接口(JNI)技术与底层操作系统以及蓝牙硬件进行通信。通过这种方式,BlueCove能够运行在支持JNI的多种平台上。

关键类和方法的功能描述

在BlueCove API中,有一些关键的类和方法需要特别注意。例如, BluetoothAdapter 类提供了访问蓝牙适配器(即蓝牙硬件)的方法。通过这个类,可以进行设备发现、获取已配对的设备列表、管理设备配对等操作。

另一个重要的类是 BluetoothDevice ,它代表一个远程蓝牙设备。这个类允许应用程序查询设备信息、发起连接、以及与远程设备进行数据通信。

此外, BluetoothSocket 类则是用于建立数据连接的。它使得通过蓝牙网络套接字进行数据传输成为可能。开发者可以通过这个类的实例来进行数据发送和接收,实现应用程序之间的数据交换。

测试代码

获取本机(PC)蓝牙

添加引用

<dependency>
    <groupId>io.ultreia</groupId>
    <artifactId>bluecove</artifactId>
    <version>2.1.1</version>
</dependency>

打印PC蓝牙名称

import javax.bluetooth.*;
 
public class BlueCoveTest {
    public static void main(String[] args) {
        LocalDevice localDevice = LocalDevice.getLocalDevice();
        System.out.println("Local Device Name: " + localDevice.getFriendlyName());
    }
}

image

扫描蓝牙

  • DiscoveryAgent.GIAC:一般的不受限的发现模式;
  • DiscoveryAgent.LIAC:受限的发现模式,具体情况取决于API的具体实现;
  • DiscoveryAgent.NOT_DISCOVERABLE:不可被发现。
package com.vipsoft.boot;

import javax.bluetooth.*;
import java.io.IOException;

public class BleDiscoverDevices {

    final static Object inquiryCompletedEvent = new Object();

    public static void main(String[] args) {
        try {
            synchronized (inquiryCompletedEvent) {
                // 获取本地蓝牙设备
                LocalDevice localDevice = LocalDevice.getLocalDevice();
                // 获取蓝牙设备管理器
                DiscoveryAgent agent = localDevice.getDiscoveryAgent();
                // 设置设备发现监听器
                DeviceDiscoveryListener listener = new DeviceDiscoveryListener();
                // 开始发现附近的蓝牙设备
                boolean started = agent.startInquiry(DiscoveryAgent.GIAC, listener);
                if (started) {
                    System.out.println("开始搜索...");
                    inquiryCompletedEvent.wait();
                    agent.cancelInquiry(listener);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static class DeviceDiscoveryListener implements DiscoveryListener {
        @Override
        public void deviceDiscovered(RemoteDevice remoteDevice, DeviceClass deviceClass) {
            try {
                String deviceName = remoteDevice.getFriendlyName(false);
                String address = remoteDevice.getBluetoothAddress();
                System.out.println("发现蓝牙设备 Address: " + address + " Device: " + deviceName);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void servicesDiscovered(int i, ServiceRecord[] serviceRecords) {
            for (ServiceRecord record : serviceRecords) {
                System.out.println("Service discovered: " + record.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false));
            }
        }

        @Override
        public void serviceSearchCompleted(int i, int i1) {
            System.out.println("Service search completed");
        }

        @Override
        public void inquiryCompleted(int i) {
            System.out.println("搜索完成");
            synchronized (inquiryCompletedEvent) {
                inquiryCompletedEvent.notifyAll();
            }
        }
    }
}

image

源码:https://gitee.com/VipSoft/VipBoot/tree/develop/vipsoft-bluetooth

标签:Java,蓝牙,BlueCove,API,Bluetooth,public,设备
From: https://www.cnblogs.com/vipsoft/p/18660378

相关文章

  • (免费送源码)计算机毕业设计原创定制:Java+ssm+MySQL ssm家电售后服务
     摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对家电售后服务等问题,对家电售后服务进行研究分析,然后开发设计出家电售后服务以解决问题。......
  • (免费送源码)计算机毕业设计原创定制:Java+B/S+MySQL SpringBoot高校学生档案管理系统
     摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对高校学生档案管......
  • 基于Java+SpringBoot的瑜伽馆管理系统
    关注底部领取源码源码编号:S413源码名称:基于SpringBoot的瑜伽馆管理系统用户类型:多角色,用户、教练、管理员主要技术:Java、Vue、ElementUl、SpringBoot运行环境:Windows/Mac、JDK1.8及以上运行工具:IDEA/Eclipse数 据 库:MySQL5.7及以上版本数据库表数量:13张表是否有......
  • 深入理解Java:类与对象的基石
    1.一个类可以创建出多个对象2.类是创建对象的模板3.链表有data域,指针域4.Java如何创建链表5.相同的数据不同的类型,在内存当中的存储形式是不一样的6.inta=10;------>00000000000000000000000000001010   shortb=10;---->0000000000001010   fl......
  • 基于Java+SpringBoot的瑜伽馆管理系统
    关注底部领取源码源码编号:S413源码名称:基于SpringBoot的瑜伽馆管理系统用户类型:多角色,用户、教练、管理员主要技术:Java、Vue、ElementUl、SpringBoot运行环境:Windows/Mac、JDK1.8及以上运行工具:IDEA/Eclipse数 据 库:MySQL5.7及以上版本数据库表数量:13张表是否有......
  • JavaFX基础之组件讲解
    @目录1JavaFX组件1.1Application1.2Stage舞台(窗口)1.2.1创建舞台1.2.2展示舞台1.2.3在舞台上设置场景1.2.4舞台标题1.2.5舞台位置1.2.6舞台宽度和高度1.2.7舞台风格1.2.8舞台全屏模式1.2.9阶段生命周期事件1.2.10键盘或鼠标事件1.3Scene场景1.3.1创建场景1.3.2在......
  • JavaFX基础之环境配置,架构,FXML
    目录1JavaFX1.1简介1.2环境准备1.2.1手动管理依赖1.2.2maven或Gradle管理1.3JavaFX架构1.3.1JavaFX架构图1.3.2JavaFX组件1.3.2.1舞台1.3.2.2场景1.3.2.3控件1.3.2.4布局1.3.2.5图表1.3.2.62D图形1.3.2.73D图形1.3.2.8声音1.3.2.9视频1.4简单使用1.5FXML1.5.......
  • Java注解与反射--枚举
    Java注解与反射注解注解定义使用注解反射获取Class对象使用Class对象注解与反射举例定义一个注解@SetValue,给类成员变量赋值枚举类型定义与使用枚举类方法枚举继承接口注解给类、方法、变量、参数等标注的信息注解本身不影响程序运行,但可以通过反射机制,对被标......
  • Java基础学习(四)
    Java基础学习(四):方法目录Java基础学习(四):方法定义调用重载命令行传参可变长参数递归本文为个人学习记录,内容学习自狂神说Java定义方法的组成部分:修饰符:可选,定义了访问类型返回值类型:没有返回值时为void,否则为具体返回值方法名:方法的实际名称,应遵守驼峰原则参数类型参......
  • java-se-01
    Java目录Java1.我的第一个Java程序2.Java简介3.开发环境4.Java基础5.注释6.Java对象和类7.基本数据类型8.基本命名规则9.修饰符10.String类11.StringBuffer和StringBuilder12.流(stream),文件(File)和IO1.我的第一个Java程序publicclassMain{publicstaticvoidmain(Stri......