需要bluecove.jar
下载地址:
bluecove-2.1.0.jar
bluecove-2.1.1-SNAPSHOT(x64).jar
作为服务端:

public class BluetoothJavaServer {private StreamConnectionNotifier mStreamConnectionNotifier = null;private StreamConnection mStreamConnection = null;public static void main(String[] args) {new BluetoothJavaServer();}public BluetoothJavaServer() {try {// 服务器端的UUID必须和手机端的UUID相一致。手机端的UUID需要去掉中间的-分割符。mStreamConnectionNotifier = (StreamConnectionNotifier) Connector.open("btspp://localhost:0000110100001000800000805F9B34FB");} catch (Exception e) {e.printStackTrace();}// 开启线程读写蓝牙上接收和发送的数据。new Thread(new Runnable() {@Overridepublic void run() {try {System.out.println("服务器端开始监听...");while (true) {mStreamConnection = mStreamConnectionNotifier.acceptAndOpen();System.out.println("接受连接");InputStream is = mStreamConnection.openInputStream();byte[] buffer = new byte[1024];System.out.println("开始读数据...");// 读数据。int len=0;while ((len=is.read(buffer)) != -1) {String s = new String(buffer,0,len);System.out.println(s);}is.close();mStreamConnection.close();}} catch (Exception e) {e.printStackTrace();}}}).start();}
}

作为客户端:
分为3步:

  1. 发现蓝牙设备(对于已配对设备可跳过扫描,直接获取已配对设备即可)
  2. 查询符合条件的设备
  3. 传输数据

1.扫描蓝牙设备代码:
扫描的设备存放在devicesDiscovered中

public class RemoteDeviceDiscovery {public static final Vector/*<RemoteDevice>*/ devicesDiscovered = new Vector();public static void main(String[] args) throws IOException, InterruptedException {final Object inquiryCompletedEvent = new Object();devicesDiscovered.clear();DiscoveryListener listener = new DiscoveryListener() {public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {System.out.println("Device " + btDevice.getBluetoothAddress() + " found");devicesDiscovered.addElement(btDevice);try {System.out.println("     name " + btDevice.getFriendlyName(false));} catch (IOException cantGetDeviceName) {}}public void inquiryCompleted(int discType) {System.out.println("Device Inquiry completed!");synchronized(inquiryCompletedEvent){inquiryCompletedEvent.notifyAll();}}public void serviceSearchCompleted(int transID, int respCode) {}public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {}};synchronized(inquiryCompletedEvent) {boolean started = LocalDevice.getLocalDevice().getDiscoveryAgent().startInquiry(DiscoveryAgent.GIAC, listener);if (started) {System.out.println("wait for device inquiry to complete...");inquiryCompletedEvent.wait();System.out.println(devicesDiscovered.size() +  " device(s) found");}}}
}

获取已配对设备

//获取已配对设备 DiscoveryAgent.PREKNOWN表示已配对的所有设备;
//DiscoveryAgent.CACHED表示配对已连接设备
RemoteDevice[] remoteDevices = LocalDevice.getLocalDevice().getDiscoveryAgent().retrieveDevices(DiscoveryAgent.CACHED);

2.查询符合条件的设备:通过uuid在设备列表中查询目标设备,查询到的设备放在serviceFound中

public class ServicesSearch {private static final UUID OBEX_OBJECT_PUSH = new UUID("0000110100001000800000805F9B34FB",false);public static final Vector<String> serviceFound = new Vector();public static void main(String[] args) throws IOException, InterruptedException {// First run RemoteDeviceDiscovery and use discoved device// RemoteDeviceDiscovery.main(null);serviceFound.clear();UUID serviceUUID = OBEX_OBJECT_PUSH;if ((args != null) && (args.length > 0)) {serviceUUID = new UUID(args[0], false);}final Object serviceSearchCompletedEvent = new Object();DiscoveryListener listener = new DiscoveryListener() {public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {}public void inquiryCompleted(int discType) {}public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {for (int i = 0; i < servRecord.length; i++) {String url = servRecord[i].getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);if (url == null) {continue;}serviceFound.add(url);DataElement serviceName = servRecord[i].getAttributeValue(0x0100);if (serviceName != null) {System.out.println("service " + serviceName.getValue() + " found " + url);} else {System.out.println("service found " + url);}}}public void serviceSearchCompleted(int transID, int respCode) {System.out.println("service search completed!");synchronized(serviceSearchCompletedEvent){serviceSearchCompletedEvent.notifyAll();}}};UUID[] searchUuidSet = new UUID[] { serviceUUID };int[] attrIDs =  new int[] {0x0100 // Service name};for(Enumeration en = RemoteDeviceDiscovery.devicesDiscovered.elements(); en.hasMoreElements(); ) {RemoteDevice btDevice = (RemoteDevice)en.nextElement();synchronized(serviceSearchCompletedEvent) {System.out.println("search services on " + btDevice.getBluetoothAddress() + " " + btDevice.getFriendlyName(false));LocalDevice.getLocalDevice().getDiscoveryAgent().searchServices(attrIDs, searchUuidSet, btDevice, listener);serviceSearchCompletedEvent.wait();}}}}

3.传输数据,通过输出流传输数据

public class BluetoothClient {private static String serverUUID = "0000110100001000800000805F9B34FB";private static String serverURL = null;public static void main(String[] args) throws Exception {SystemTray systemTray = SystemTray.getSystemTray();ImageIcon imageIcon = new ImageIcon(BluetoothClient.class.getResource("/icon/1.png"));TrayIcon trayIcon = new TrayIcon(imageIcon.getImage(),"");systemTray.add(trayIcon);}public static Vector<String> getServerURL(String serverUUID) throws Exception {ServicesSearch.main(new String[] { serverUUID });if (ServicesSearch.serviceFound.size() == 0) {return new Vector<String>();}return ServicesSearch.serviceFound;}public static OutputStream getOutputstream(String serverURL) throws Exception {StreamConnection connection = (StreamConnection) Connector.open(serverURL);return connection.openOutputStream();}
}

blueCove进行蓝牙传输数据相关推荐

  1. 04-iOS蓝牙传输数据演示

    蓝牙传输数据演示 在上一小节中,我们一起开发了基于蓝牙通讯的工具类,该类中详细的实现蓝牙连接流程中的每一个环节 本小节我们就以给小米手环发送数据使其震动来演示我们工具类的用法 工具类本身具有通用性,属 ...

  2. android蓝牙传输数据_Android的蓝牙数据传输

    android蓝牙传输数据 要开发通过蓝牙(BT)进行数据传输的Android应用程序,请从逻辑上从Android开发人员的蓝牙页面开始,该页面详细描述了所有必需的步骤:设备发现,配对,客户端/服务器 ...

  3. java bluecove教程_Eclipse + Java + BlueCove + WIN/MAC 蓝牙开发

    随着智能终端的推广,蓝牙技术被使用的越来越多,Android,IOS等都已经封装好了专门的接口供其蓝牙开发,在电脑上,有一个专门为用Java开发蓝牙的插件,叫BlueCo 随着智能终端的推广,蓝牙技术 ...

  4. 【FAQ】【HarmonyOS】鸿蒙java开发关于蓝牙通信api的传输数据大小设置

    [问题描述] 在使用BlePeripheralDevice类的writeCharacteristic方法向蓝牙传输数据,如果数据长度长一点,通过串口工具发现蓝牙设备端是会分包接受数据的各个部分,那么鸿 ...

  5. android蓝牙音乐之AVRCP介绍和使用

    引言 最近做的车载蓝牙音乐开发,遇到很多问题,记录一下.也是到处东拼西凑的,勉强看看吧. AVRCP:Audio/Video Remote Control Profile,音视频远端控制协议,所以该协 ...

  6. 蓝牙 GameKit

    一.准备工作 1.搭建UI  2.拖线 // 图片 @property (weak, nonatomic) IBOutlet UIImageView *imageView; // 建立连接 - (IB ...

  7. 深入了解Android蓝牙Bluetooth——《基础篇》

    深入了解Android蓝牙Bluetooth--<基础篇> 什么是蓝牙?   也可以说是蓝牙技术.所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的 ...

  8. Android 蓝牙技术 实现终端间数据传输

    蓝牙技术在智能硬件方面有很多用武之地,今天我就为大家分享一下蓝牙技术在Android系统下的使用方法技巧.蓝牙是一种短距离的无线通信技术标准,蓝牙协议分为4层,即核心协议层.电缆替代协议层.电话控制协 ...

  9. (Arduino)蓝牙和 APPinventor实现一键SOS求救(一)

    蓝牙和 APPinventor实现一键SOS求救(Arduino) 大家好,最近准备参加学校的比赛,做了一个项目,需要用到一键SOS求救,可实现手机自动拨打电话.中途遇到一些问题,所以想记录下来.希望 ...

最新文章

  1. 小技巧: 从开始菜单进行网络搜索
  2. idea resources目录_最全八种IDEA目录类型标注:Mark Dir as Sources/Resources Root
  3. 计算机专业好的211大学6,计算机专业好的985大学有哪些?附985211计算机大学名单排名...
  4. linux 网卡配置不一致,linux环境下,双网卡配置不同网段后,路由问题
  5. 《Deep Learning》笔记
  6. 【Java从0到架构师】SpringMVC - 返回值
  7. 15 JS运算符优先级
  8. network location awareness 错误
  9. matlab 非线性动力系统 极限环,非线性动力系统混沌运动的Matlab数值模拟.doc
  10. Java可以做什么工作
  11. A Game of Thrones(58)
  12. mac怎么压缩pdf文件大小?
  13. 基于4G工业路由器的智慧厕所管理方案
  14. 服务拆分理论和原理及方法
  15. 时间戳是什么?JS中时间戳的展示
  16. Vue 跨域问题解决
  17. Python语句十大优雅写法
  18. Nginx采用yum安装-Carr
  19. 51单片机通过驱动器精准控制步进电机
  20. 联发科嵌入式linux笔试

热门文章

  1. python测试开发教程_python3测试工具开发快速入门教程
  2. 变革:区块链上的政府和企业应用
  3. 求答案 ? 一筐鸡蛋: 1个1个拿,正好拿完。 2个2个拿,还剩1个。 3个3个拿,正好拿完。 4个4个拿,还剩1个。 5个5个拿,还差1个。 6个6个拿,还剩3个。 7个7个拿,还剩4个。 8个8个
  4. Python发送微信消息(文字、图片、文件)给指定好友和微信群,零基础可看懂(附源码和教程)
  5. mysql中数据发生变化时判断_MySql插入记录时判断
  6. 解决eclipse控制台不能正常输入问题的心路历程
  7. 吴俊计算机音乐研究者,音乐创作中计算机音乐技术的应用研究
  8. 为什么中高档汽车都使用双目摄像头?
  9. gitblit本地版本管理库-localhost访问
  10. 树莓派一键部署私有云