Java?Bluetooth?藍(lán)牙通訊?BlueCove?掃描附近的藍(lán)牙設(shè)備(測(cè)試代碼)
BlueCove項(xiàng)目概述
BlueCove是一個(gè)開(kāi)源的藍(lán)牙協(xié)議棧實(shí)現(xiàn),旨在為Java開(kāi)發(fā)者提供一個(gè)全面的、易于使用的API,從而在應(yīng)用程序中實(shí)現(xiàn)藍(lán)牙功能。該項(xiàng)目支持多種操作系統(tǒng),包括Windows、Linux和Mac OS X,并且能夠與多種藍(lán)牙硬件設(shè)備兼容。
BlueCove項(xiàng)目對(duì)這些協(xié)議的廣泛支持,使得開(kāi)發(fā)人員能夠?yàn)椴煌愋偷乃{(lán)牙設(shè)備開(kāi)發(fā)應(yīng)用程序,而不必?fù)?dān)心兼容性問(wèn)題。
BlueCove API架構(gòu)
API的設(shè)計(jì)原則和實(shí)現(xiàn)方式
BlueCove API是一套Java語(yǔ)言的開(kāi)源藍(lán)牙API實(shí)現(xiàn),它為Java應(yīng)用提供了訪問(wèn)藍(lán)牙設(shè)備和進(jìn)行藍(lán)牙通信的能力。API的設(shè)計(jì)遵循了Java的設(shè)備無(wú)關(guān)性原則,提供了一套統(tǒng)一的編程接口,使得開(kāi)發(fā)者可以在不關(guān)心具體藍(lán)牙硬件實(shí)現(xiàn)的情況下,編寫(xiě)跨平臺(tái)的藍(lán)牙應(yīng)用。
API的實(shí)現(xiàn)主要依賴于底層的藍(lán)牙硬件抽象層(HAL)來(lái)與藍(lán)牙硬件進(jìn)行交互。BlueCove使用Java本地接口(JNI)技術(shù)與底層操作系統(tǒng)以及藍(lán)牙硬件進(jìn)行通信。通過(guò)這種方式,BlueCove能夠運(yùn)行在支持JNI的多種平臺(tái)上。
關(guān)鍵類和方法的功能描述
在BlueCove API中,有一些關(guān)鍵的類和方法需要特別注意。例如, BluetoothAdapter 類提供了訪問(wèn)藍(lán)牙適配器(即藍(lán)牙硬件)的方法。通過(guò)這個(gè)類,可以進(jìn)行設(shè)備發(fā)現(xiàn)、獲取已配對(duì)的設(shè)備列表、管理設(shè)備配對(duì)等操作。
另一個(gè)重要的類是 BluetoothDevice ,它代表一個(gè)遠(yuǎn)程藍(lán)牙設(shè)備。這個(gè)類允許應(yīng)用程序查詢?cè)O(shè)備信息、發(fā)起連接、以及與遠(yuǎn)程設(shè)備進(jìn)行數(shù)據(jù)通信。
此外, BluetoothSocket 類則是用于建立數(shù)據(jù)連接的。它使得通過(guò)藍(lán)牙網(wǎng)絡(luò)套接字進(jìn)行數(shù)據(jù)傳輸成為可能。開(kāi)發(fā)者可以通過(guò)這個(gè)類的實(shí)例來(lái)進(jìn)行數(shù)據(jù)發(fā)送和接收,實(shí)現(xiàn)應(yīng)用程序之間的數(shù)據(jù)交換。
測(cè)試代碼
獲取本機(jī)(PC)藍(lán)牙
添加引用
<dependency> <groupId>io.ultreia</groupId> <artifactId>bluecove</artifactId> <version>2.1.1</version> </dependency>
打印PC藍(lán)牙名稱
import javax.bluetooth.*; public class BlueCoveTest { public static void main(String[] args) { LocalDevice localDevice = LocalDevice.getLocalDevice(); System.out.println("Local Device Name: " + localDevice.getFriendlyName()); } }
掃描藍(lán)牙
- DiscoveryAgent.GIAC:一般的不受限的發(fā)現(xiàn)模式;
- DiscoveryAgent.LIAC:受限的發(fā)現(xiàn)模式,具體情況取決于API的具體實(shí)現(xiàn);
- DiscoveryAgent.NOT_DISCOVERABLE:不可被發(fā)現(xiàn)。
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) { // 獲取本地藍(lán)牙設(shè)備 LocalDevice localDevice = LocalDevice.getLocalDevice(); // 獲取藍(lán)牙設(shè)備管理器 DiscoveryAgent agent = localDevice.getDiscoveryAgent(); // 設(shè)置設(shè)備發(fā)現(xiàn)監(jiān)聽(tīng)器 DeviceDiscoveryListener listener = new DeviceDiscoveryListener(); // 開(kāi)始發(fā)現(xiàn)附近的藍(lán)牙設(shè)備 boolean started = agent.startInquiry(DiscoveryAgent.GIAC, listener); if (started) { System.out.println("開(kāi)始搜索..."); 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("發(fā)現(xiàn)藍(lán)牙設(shè)備 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
到此這篇關(guān)于Java Bluetooth 藍(lán)牙通訊 BlueCove 掃描附近的藍(lán)牙設(shè)備(測(cè)試代碼)的文章就介紹到這了,更多相關(guān)Java Bluetooth 藍(lán)牙通訊 BlueCove 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Java中Object類的幾個(gè)方法示例
這篇文章主要給大家介紹了關(guān)于Java中Object類的幾個(gè)方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05Spring AOP之@Around,@AfterReturning使用、切不進(jìn)去的解決方案
這篇文章主要介紹了Spring AOP之@Around,@AfterReturning使用、切不進(jìn)去的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Java使用BigDecimal公式精確計(jì)算及精度丟失問(wèn)題
在工作中經(jīng)常會(huì)遇到數(shù)值精度問(wèn)題,比如說(shuō)使用float或者double的時(shí)候,可能會(huì)有精度丟失問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Java使用BigDecimal公式精確計(jì)算及精度丟失問(wèn)題的相關(guān)資料,需要的朋友可以參考下2023-01-01java中不定長(zhǎng)參數(shù)的實(shí)例用法
在本篇文章里小編給大家分享的是關(guān)于java中不定長(zhǎng)參數(shù)的使用方法以及相關(guān)代碼內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。2020-02-02基于Java實(shí)現(xiàn)緩存Cache的深入分析
本篇文章是對(duì)Java實(shí)現(xiàn)緩存Cache進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06Spring?Boot+RabbitMQ?通過(guò)fanout模式實(shí)現(xiàn)消息接收功能(支持消費(fèi)者多實(shí)例部署)
這篇文章主要介紹了Spring?Boot+RabbitMQ?通過(guò)fanout模式實(shí)現(xiàn)消息接收(支持消費(fèi)者多實(shí)例部署),本文通過(guò)案例場(chǎng)景分析給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03解決spring boot啟動(dòng)掃描不到自定義注解的問(wèn)題
這篇文章主要介紹了解決spring boot啟動(dòng)掃描不到自定義注解的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09