Android蓝牙简单封装
代码如下:
package com.yds.jianshu.utils;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* Created by yds
* on 2019/9/24.
*/
public class BluetoothUtil {
/**
* Weather the device support bluetooth
* 判断是否支持蓝牙
*
* @return
*/
public static boolean isSupportBluetooth() {
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
return false;
}
return true;
}
/**
* Weather the bluetooth is open
* 判断蓝牙是否已打开
*
* @return
*/
public static boolean isOpenBluetooth() {
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (isSupportBluetooth()) {
return bluetoothAdapter.isEnabled();
}
return false;
}
/**
* Focus open the bluetooth
* 强制打开蓝牙
*
* @return
*/
public static boolean focusOpenBluetooth() {
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter.isEnabled()) {
return true;
}
return bluetoothAdapter.enable();
}
/**
* Get the list of bond devices
* 获取已配对设备列表
* @return
*/
public List<BluetoothDevice> checkDevice() {
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
List<BluetoothDevice> bondDeviceList = new ArrayList<>();
Set<BluetoothDevice> bluetoothDeviceSet = bluetoothAdapter.getBondedDevices();
if (bluetoothDeviceSet != null && bluetoothDeviceSet.size() > 0) {
for (BluetoothDevice device : bluetoothDeviceSet) {
bondDeviceList.add(device);
}
}
return bondDeviceList;
}
}
值得注意的是,打开蓝牙会弹出弹窗,如果调用focusOpenBluetooth之后还要做蓝牙打开之后的操作,则必须等待打开蓝牙操作完成,例如如下代码:
boolean isSupport = BluetoothUtil.isSupportBluetooth();
System.out.println("isSupport:"+isSupport);
boolean isOpen = BluetoothUtil.isOpenBluetooth();
System.out.println("isOpenBefore:"+BluetoothUtil.isOpenBluetooth());
if(!isOpen){
boolean isSuccessOpen = BluetoothUtil.focusOpenBluetooth();
System.out.println("isSuccessOpen:"+isSuccessOpen);
}
System.out.println("isOpenAfter:"+BluetoothUtil.isOpenBluetooth());
如上代码,isOpenAfter这一行代码可能在蓝牙还未正式开启便已执行完,上述代码执行结果如下:
before.png
可以看到isSuccessOpen为true,但是isOpenAfter为false
下面进行同步操作
boolean isSupport = BluetoothUtil.isSupportBluetooth();
System.out.println("isSupport:"+isSupport);
boolean isOpen = BluetoothUtil.isOpenBluetooth();
ConditionVariable conditionVariable = new ConditionVariable();
System.out.println("isOpenBefore:"+BluetoothUtil.isOpenBluetooth());
if(!isOpen){
boolean isSuccessOpen = BluetoothUtil.focusOpenBluetooth();
System.out.println("isSuccessOpen:"+isSuccessOpen);
}
conditionVariable.block(5000);
System.out.println("isOpenAfter:"+BluetoothUtil.isOpenBluetooth());
让BluetoothUtil.focusOpenBluetooth()执行完后等待5秒,然后再执行isOpenAfter,结果如下:
after.png
可以看到,这里的isOpenAfter为true.









网友评论