Android通过蓝牙发送数据到Windows PC电脑:Java实现Android手机设备之间通过蓝牙连接然后发送数据,这在我之前的蓝牙专栏里面有介绍,详情见专栏:https://blog.csdn.net/column/details/17325.html但是通常还有一...

Android通过蓝牙发送数据到Windows PC电脑:Java实现
Android手机设备之间通过蓝牙连接然后发送数据,这在我之前的蓝牙专栏里面有介绍,详情见专栏:https://blog.csdn.net/column/details/17325.html
但是通常还有一种功能需求是Android手机如何通过蓝牙把数据传输到Windows PC上呢?这在需求还很常见,比如用户通过Android手机拍照,然后像把照片传到电脑上,或者反之,电脑上的文件资料打算通过蓝牙传到手机上。
现在就实现这种功能。在编程模型上,这里把电脑设计成服务器端,用Java实现一个Windows电脑上的蓝牙服务器,名为:BluetoothJavaServer。
Java SE本身并没有实现蓝牙功能模块,如果在Windows通过Java实现蓝牙功能,需要额外的导入两个jar(64位):
1,bluecove-2.1.1-SNAPSHOT.jar
下载:http://snapshot.bluecove.org/distribution/download/2.1.1-SNAPSHOT/2.1.1-SNAPSHOT.63/
2,commons-io-2.6.jar
下载:http://commons.apache.org/proper/commons-io/download_io.cgi
部署在Windows PC电脑上的蓝牙服务器端代码BluetoothJavaServer.java:
部署在Android手机客户端的BluetoothClientActivity.java
运行Android手机客户端程序后,务必检查当前App是否获得了蓝牙连接的所有权限。本例出于简单演示期间没有添加蓝牙权限申请的功能代码,关于蓝牙权限申请的功能,请看我写的专栏。BluetoothClientActivity如果在Android高版本上运行,第一次可能运行不成功,原因是权限没有授予,可以打开手机应用管理设置,把相关权限全部授予。然后退出当前程序,再次启动BluetoothClientActivity即可。
Android手机的蓝牙客户端首先会检测目标蓝牙设备和当前手机是否已经配对,如果已经配过对,那么直接连接并发送数据到服务器端,如果没有配对成功的目标蓝牙设备,则开启蓝牙的扫描搜索,搜索目标配对蓝牙设备再连接并发送数据。
运行这个例子前,确保Android手机和Windows电脑上的蓝牙均处于打开状态。
本例是假设Android手机客户端要连接的Windows蓝牙服务器端的名称为:PHIL-PC。这个名字是Android手机蓝牙客户端和Windows蓝牙服务器端一致的,不一致则无法进行连接。
UUID是Android手机客户端和服务器端连接的依据,必须一致,本例使用熟知的蓝牙连接UUID:00001101-0000-1000-8000-00805F9B34FB
UUID在Java SE端的代码中,需要去掉UUID里面含有的-分割线,变成:
0000110100001000800000805F9B34FB
而在Android手机客户端代码中,不需要改变,直接使用:
00001101-0000-1000-8000-00805F9B34FB
代码运行后,Windows PC服务器端的日志输出,收到了Android手机发送过来的hello,world字符串:
BlueCove version 2.1.1-SNAPSHOT on winsock
服务器端开始监听...
等待客户端连接...
接受连接
开始读数据...
hello,world!
Android手机连接到Windows PC服务器成功并发送了数据hello,world:
2018-10-18 14:12:04.620 29786-29786/zhangphil.test D/蓝牙调试: PHIL-PC : 44:03:2C:87:28:C7
2018-10-18 14:12:04.622 29786-29786/zhangphil.test D/蓝牙调试: 已配对目标设备 -> PHIL-PC
2018-10-18 14:12:04.635 29786-29815/zhangphil.test D/蓝牙调试: 连接服务端...
2018-10-18 14:12:06.085 29786-29815/zhangphil.test D/蓝牙调试: 连接建立.
2018-10-18 14:12:06.087 29786-29815/zhangphil.test D/蓝牙调试: 发送成功
我把这个代码例子上传到github上,链接地址:https://github.com/zhangphil/AndroidLinkToPC
该连接下放置了部署到Windows PC服务器端的BluetoothJavaServer.java文件,以及运行在Android手机上的BluetoothClientActivity.java代码文件。同时还连同两个Java SE实现蓝牙功能依赖的两个jar库文件:bluecove-2.1.1-SNAPSHOT.jar和commons-io-2.6.jar。(基于Windows 64位)