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 扫描附近的蓝牙设备的更多相关文章

  1. Android学习——蓝牙通讯

    蓝牙蓝牙,是一种支持设备短距离通信(一般10m内,且无阻隔媒介)的无线电技术.能在包括移动电话.PDA.无线耳机.笔记本电脑等众多设备之间进行无线信息交换.利用“蓝牙”技术,能够有效的简化移动通信终端 ...

  2. android 蓝牙通讯编程 备忘

    1.启动App后: 判断->蓝牙是否打开(所有功能必须在打牙打开的情况下才能用) 已打开: 启动代码中的蓝牙通讯Service 未打开: 发布 打开蓝牙意图(系统),根据Activity返回进场 ...

  3. Android蓝牙通讯【转】

    本文转载自:http://blog.csdn.net/vnanyesheshou/article/details/51554852 随着可穿戴设备的流行,研究蓝牙是必不可少的一门技术了. 总结了下蓝牙 ...

  4. android蓝牙通讯开发(详细)

    新建一个工程之后,我们可以先看到界面左边的项目栏,我们可以看到,除了app目录以外,大多数的文件和目录都是自动生成的,我们也不需要对他们进行修改,而app目录之下的文件才是我们工作的重点.下面,我先对 ...

  5. iOS开发之蓝牙通讯

    iOS开发之蓝牙通讯 一.引言 蓝牙是设备近距离通信的一种方便手段,在iPhone引入蓝牙4.0后,设备之间的通讯变得更加简单.相关的蓝牙操作由专门的CoreBluetooth.framework进行 ...

  6. Java 线程间通讯(管道流方式)

    一.管道流是JAVA中线程通讯的常用方式之一,基本流程如下: 1)创建管道输出流PipedOutputStream pos和管道输入流PipedInputStream pis 2)将pos和pis匹配 ...

  7. Java 线程间通讯(共享变量方式)

    Java线程间通讯,最常用的方式便是共享变量方式,多个线程共享一个静态变量就可以实现在线程间通讯,但是这需要注意的就是线程同步问题. 一.没考虑线程同步: package com.wyf; publi ...

  8. iOS开发--通过MultipeerConnectivity完成蓝牙通讯

    iOS开发–通过MultipeerConnectivity完成蓝牙通讯 iOS蓝牙通讯的三种方式: GameKit.framework:iOS7之前的蓝牙通讯框架,从iOS7开始过期,但是目前已经被淘 ...

  9. PC端 java 开发蓝牙所遇到的问题

    由于项目的原因.要在电脑上开发一个通过蓝牙传送数据的client.我採用的是JAVA,JSME开发. client:去搜素蓝牙信号,然后找到对应的蓝牙信号进行连接. 服务端:client须要进行连接的 ...

  10. 浅谈Bluetooth蓝牙开发

    前言:项目用到蓝牙开发,具体蓝牙获取硬件传感器中的数据. 因为没有蓝牙开发的相关经验,决定先了解一些蓝牙开发的知识,再去看之前同事写的蓝牙相关代码. ------------------------- ...

随机推荐

  1. 字符串、列表、元组、字典(python)

    文章目录 1.python字符串 1.1 python访问字符串中的值 1.2Python 字符串连接 1.3Python字符串运算符 2.python列表 2.1访问列表中的值 2.2更新列表 2. ...

  2. Go语言基础05 _string

    Go语言基础05 _string 1.基本使用 package string import "testing" func TestString(t *testing.T) { va ...

  3. [Apache Doris] Apache Doris 架构及代码目录解读

    一.系统架构 Doris是一个MPP的OLAP系统,主要整合了Google Mesa(数据模型),Apache Impala(MPP Query Engine)和Apache ORCFile (存储格 ...

  4. 记录一下opencv-contrib的编译使用

    一.来由 公司需求进行多图拼接算法,在opencv提供的Stitcher类当中默认的算子是ORB,我想尝试使用SIFT和SURF算子,经过一番查找发现这两个算子需要opencv的超集库支持--&quo ...

  5. 搭建离线yum源

    HTTP方式 安装步骤 系统:CentOS 7.6 yum install -y httpd vi /etc/httpd/conf/httpd.conf <Directory /> Opt ...

  6. 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现八

    一.前言介绍: 1.1 项目摘要 随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势.传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速.便捷需求.这些问题不 ...

  7. toFullScreen:全屏------exitFullscreen:退出全屏

    toFullScreen:全屏 function toFullScreen(){ let elem = document.body; elem.webkitRequestFullScreen ? el ...

  8. CAD Build 隐私说明

    该App不会收集任何用户隐私数据.

  9. memcached简介及java使用方法

    一. 概念 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 二. 适用场合 1. 分布式应用 ...

  10. JAVA 注解示例 详解

    注解(Annotation) 为我们在代码中天界信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解析注解 来使用这些数据). 注解的语法比较简单,除了@符号的使用以外, ...