搜索配对什么的在手机系统设置里就能完成,本人太懒暂时没学,哎
每个代码块都可以独立运行,如果要和在一起,记得把多定义的变量删除
这篇文章将的内容如下,
判断是否支持蓝牙
判断蓝牙是否打开
打开蓝牙
搜索蓝牙
蓝牙配对
查看已经配对的设备
连接蓝牙
发送数据
接收数据
配置权限
image.png<!-- 安卓6.0以下 -->
<!-- 使用蓝牙的权限 -->
<uses-permission android:name="android.permission.BLUETOOTH"/>
<!-- 扫描蓝牙设备或者操作蓝牙设置 -->
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!-- 安卓6.0以上 -->
<!-- 使用蓝牙的权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<!-- 扫描蓝牙设备或者操作蓝牙设置 -->
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!--模糊定位权限,仅作用于6.0+-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--精准定位权限,仅作用于6.0+-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
判断是否支持蓝牙
BluetoothAdapter mBluetoothAdapter;
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter == null){
// 说明此设备不支持蓝牙操作
}else {
// 说明此设备支持蓝牙操作
}
判断蓝牙是否打开,没有就打开蓝牙
BluetoothAdapter mBluetoothAdapter;
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if(!mBluetoothAdapter.isEnabled()){
//蓝牙没有打开
mBluetoothAdapter.enable();//打开蓝牙
}else
{
//蓝牙已经打开了
}
查看已经配对的设备
BluetoothAdapter mBluetoothAdapter;
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
if(pairedDevices.size() > 0){
for(BluetoothDevice device:pairedDevices){
// 这里打印出来的就是已经配对的设备名和mac地址
//可以记下你要连接的蓝牙mac地址,等下连接要用
System.out.println("\n===="+device.getName()+" : "+ device.getAddress());
}
}
连接蓝牙设备
BluetoothAdapter mBluetoothAdapter;//你自己的手机蓝牙
BluetoothDevice device;//你准备连接哪个蓝牙
BluetoothSocket socket;//连接成功后返回的socket服务,类似TCP的socket
String remoteDevMac="20:19:05:14:22:94";//选一个已经配对的设备的mac地址,
String MY_UUID = "00001101-0000-1000-8000-00805F9B34FB"; //SPP服务UUID号,
//这个自行百度,不同的UUID可以提供不同的服务,
//我这里这个UUID说明使用的是串口服务
try{
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
device = mBluetoothAdapter.getRemoteDevice(remoteDevMac);
socket = device.createRfcommSocketToServiceRecord(UUID.fromString(MY_UUID));
socket.connect();
//连接成功
}catch(IOException e){
//连接失败
}
发送消息//前提要连接成功
OutputStream os = socket.getOutputStream();
os.write("hello".getBytes());//发送hello
接收消息//前提要先连接
新建一个线程用来接收
private InputStream is;//这个放在类的私有变量里
is = socket.getInputStream();//这句放在你连接成功之后,不然报错
new Thread(){
public void run(){
int num = 0;
byte[] buffer = new byte[1024];
byte[] buffer_new = new byte[1024];
int i = 0;
int n = 0;
while(true)
{
try {
if(socket!=null && socket.isConnected()) {
num = is.read(buffer);//获取本次读取长度
//
for(i=0;i<num;i++){
if((buffer[i] == 0x0d)&&(buffer[i+1]==0x0a)){
//收到0x0d 0x0a才算结束,你也可以自定义结束符号
String str = new String(buffer_new, 0, n);
System.out.println("=================:"+str+"---"+n);//打印收到的数据和数据的长度
i++;//一定要加上,因为本次读取0x0d,下一次不用读取0x0a,让他跳过
n=0;
}else{
buffer_new[n] = buffer[i];
n++;
}
}
}
}catch(IOException e){
System.out.println("=========================接收出错===============================");
}
}
}
}.start();
网友评论