Android蓝牙简单封装

2019-09-24  本文已影响0人  秀叶寒冬

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.

源码地址

源码:https://github.com/Yedongsheng/Jianshu/tree/develop

上一篇 下一篇

猜你喜欢

热点阅读