Java Bluetooth 蓝牙通讯 BlueCove 扫描附近的蓝牙设备
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());
}
}

扫描蓝牙
- 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();
}
}
}
}

源码:https://gitee.com/VipSoft/VipBoot/tree/develop/vipsoft-bluetooth
Java Bluetooth 蓝牙通讯 BlueCove 扫描附近的蓝牙设备的更多相关文章
- Android学习——蓝牙通讯
蓝牙蓝牙,是一种支持设备短距离通信(一般10m内,且无阻隔媒介)的无线电技术.能在包括移动电话.PDA.无线耳机.笔记本电脑等众多设备之间进行无线信息交换.利用“蓝牙”技术,能够有效的简化移动通信终端 ...
- android 蓝牙通讯编程 备忘
1.启动App后: 判断->蓝牙是否打开(所有功能必须在打牙打开的情况下才能用) 已打开: 启动代码中的蓝牙通讯Service 未打开: 发布 打开蓝牙意图(系统),根据Activity返回进场 ...
- Android蓝牙通讯【转】
本文转载自:http://blog.csdn.net/vnanyesheshou/article/details/51554852 随着可穿戴设备的流行,研究蓝牙是必不可少的一门技术了. 总结了下蓝牙 ...
- android蓝牙通讯开发(详细)
新建一个工程之后,我们可以先看到界面左边的项目栏,我们可以看到,除了app目录以外,大多数的文件和目录都是自动生成的,我们也不需要对他们进行修改,而app目录之下的文件才是我们工作的重点.下面,我先对 ...
- iOS开发之蓝牙通讯
iOS开发之蓝牙通讯 一.引言 蓝牙是设备近距离通信的一种方便手段,在iPhone引入蓝牙4.0后,设备之间的通讯变得更加简单.相关的蓝牙操作由专门的CoreBluetooth.framework进行 ...
- Java 线程间通讯(管道流方式)
一.管道流是JAVA中线程通讯的常用方式之一,基本流程如下: 1)创建管道输出流PipedOutputStream pos和管道输入流PipedInputStream pis 2)将pos和pis匹配 ...
- Java 线程间通讯(共享变量方式)
Java线程间通讯,最常用的方式便是共享变量方式,多个线程共享一个静态变量就可以实现在线程间通讯,但是这需要注意的就是线程同步问题. 一.没考虑线程同步: package com.wyf; publi ...
- iOS开发--通过MultipeerConnectivity完成蓝牙通讯
iOS开发–通过MultipeerConnectivity完成蓝牙通讯 iOS蓝牙通讯的三种方式: GameKit.framework:iOS7之前的蓝牙通讯框架,从iOS7开始过期,但是目前已经被淘 ...
- PC端 java 开发蓝牙所遇到的问题
由于项目的原因.要在电脑上开发一个通过蓝牙传送数据的client.我採用的是JAVA,JSME开发. client:去搜素蓝牙信号,然后找到对应的蓝牙信号进行连接. 服务端:client须要进行连接的 ...
- 浅谈Bluetooth蓝牙开发
前言:项目用到蓝牙开发,具体蓝牙获取硬件传感器中的数据. 因为没有蓝牙开发的相关经验,决定先了解一些蓝牙开发的知识,再去看之前同事写的蓝牙相关代码. ------------------------- ...
随机推荐
- 第八届御网杯线下赛Pwn方向题解
由于最近比赛有点多,而且赶上招新,导致原本应该及时总结的比赛搁置了,总结来说还是得多练,因为时间很短像这种线下赛,一般只有几个小时,所以思路一定要清晰,我还是经验太少了,导致比赛力不从心,先鸽了~ S ...
- php如何快速入门
PHP交流群 656679284 为PHP广大爱好者提供技术交流,有问必答,相互学习相互进步! 学习教程 学习前期,首要的WEB前端基础知识,比如html5/css3/java/jquery有个简 ...
- Python 如何根据给定模型计算权值
在深度学习中,模型权值(或参数)是通过训练过程学习得到的.但是,有时候我们可能需要手动计算或检查这些权值.这通常是在理解模型工作原理.调试.或者进行模型分析时非常有用的. 下面我将通过一个简单的例子, ...
- CAD Plus 使用帮助
English help 移动端使用帮助 文档更新日期: 2023-07-28; 这篇文章将介绍如何使用CAD Plus app; 如果您有疑问或需要帮助请发送邮件至 3167292926@qq.co ...
- OpenGL编程指南(原书第9版)
这本书是<OpenGL编程指南(原书第9版)>,也称为<OpenGL Programming Guide: The Official Guide to Learning OpenGL ...
- 为什么通常在发送数据埋点请求的时候要用GIF
为什么通常在发送数据埋点请求的时候使用的是 1x1 像素的透明 gif 图片? 能够完成整个 HTTP 请求+响应(尽管不需要响应内容) 触发 GET 请求之后不需要获取和处理数据.服务器也不需要发送 ...
- 黑盒视角下的RESTful API安全测试
目录 前言 关于OWASP API TOP 10 REST API接口测试思路 接口权限测试 接口校验测试 接口滥用测试 总结 前言 RESTful API(或称RESTful Web API)在线开 ...
- NLP语言学基础
不同的自然语言有不同的语法结构,因此需要对语言数据进行语法解析,才能让机器更准确地学到相应的模式.而语言不同于图像,数据标注工作需要有一定的语言学知识,因此数据的整理也相对更困难.下面以英语为例(别的 ...
- IT人写好简历的原则与方法
来源: 51cto 发布时间: 2010-03-19 14:49 阅读: 3270 次 推荐: 3 原文链接 [收藏] 时常,在各大论坛看到不少的朋友在张贴简历,希望得到他人的指点. ...
- golang之函数工具库lancet
lancet(柳叶刀)是一个全面.高效.可复用的go语言工具函数库. lancet受到了java apache common包和lodash.js的启发. 简体中文 | English 特性 全面.高 ...