Android BlueTooth蓝牙使用

对已做项目做一个总结,需求是通过蓝牙搜索设备,选择连接后,进行余后操作,那么首先要考虑到如何使用蓝牙,以及和设备进行连接呢,可以先了解一下有关BlueTooth的相关API,了解一下基本用法:https://www.jianshu.com/p/6dca236f6ad5

1.首先添加依赖权限:

  compile 'com.inuker.bluetooth:library:1.4.0'

 
    
    
    

2.搜索设备,要用到BluetoothDevice,获取到设备的名字及绑定状态。

private BluetoothClient mClient;
   //搜索设备:
    public void searchDevice(final SearchResponse response) {
        if (mClient.isBluetoothOpened()) {//判断蓝牙是否关闭,通过监听当前的状态进行搜索
            scan(response);
        } else {
            mClient.openBluetooth();
            mClient.registerBluetoothStateListener(new BluetoothStateListener() {
                @Override
                public void onBluetoothStateChanged(boolean openOrClosed) {
                    if (openOrClosed) {
                        scan(response);
                    }
                }
            });
        }
    }

// * @param response 扫描结果回调
// * @param duration 扫描间隔
// * @param times    扫描次数
    public void searchDevice(final SearchResponse response, int duration, int times){
        if (mClient.isBluetoothOpened()) {
            scan(response, duration, times);
        } else {
            mClient.openBluetooth();
            mClient.registerBluetoothStateListener(new BluetoothStateListener() {
                @Override
                public void onBluetoothStateChanged(boolean openOrClosed) {
                    if (openOrClosed) {
                        scan(response, duration, times);
                    }
                }
            });
        }
    }

    private void scan(SearchResponse response) {
        scan(response, 2000, 120);
    }

    private void scan(SearchResponse response, int duration, int times) {
        //设置蓝牙搜索的频率以及次数:
        SearchRequest request = new SearchRequest.Builder()
                .searchBluetoothLeDevice(duration, times)
                .build();
        mClient.search(request, response);//搜索
    }

2.选择设备连接的方法(通过设备的编码来选择设备连接):

//连接设备: 
public void connectDevice(SearchResult device, BleConnectResponse response) {
        mClient.stopSearch();
        BleConnectOptions options = new BleConnectOptions.Builder()
                .setConnectRetry(3)   // 连接如果失败重试3次
                .setConnectTimeout(30000)   // 连接超时30s
                .setServiceDiscoverRetry(3)  // 发现服务如果失败重试3次
                .setServiceDiscoverTimeout(20000)  // 发现服务超时20s
                .build();

        mConnectMac = device.getAddress();
        mClient.connect(mConnectMac, options, response);
    }

3.判读蓝牙是否被连接:

    //获取当前蓝牙状态: 
    int connectStatus = mGpDeviceManager.getConnectStatus(device);
    if (connectStatus == Constants.STATUS_DEVICE_CONNECTED ||
        connectStatus == Constants.STATUS_DEVICE_CONNECTING) {
        Toast.makeText(getContext(), "该蓝牙已被连接", Toast.LENGTH_SHORT).show();
        return;
    }

4.监听通知回调:

 public void notifyTime(final OnNotifyTimeListener listener) {
        mClient.notify(mConnectMac,
                UUID_FFF0_SERVICE,
                UUID_FFF1_CHARACTERISTIC,
                new BleNotifyResponse() {
                    @Override
                    public void onNotify(UUID service, UUID character, byte[] value) {
                        if (listener != null) {
                            listener.onNotifyTime(value[1], value[2]);
                        }
                    }

                    @Override
                    public void onResponse(int code) {
                        if (!(code == Constants.REQUEST_SUCCESS)) {
                            notifyTime(listener);
                        }
                    }
                });
    }

5.通讯,连接设备后(UUID为设备唯一指标),使用设备工作:

public void startCure(BleWriteResponse response) {
        mClient.write(mConnectMac,
                UUID_FFF0_SERVICE,
                UUID_FFF2_CHARACTERISTIC,
                startCmd,
                response);
    }

5.蓝牙断开:

mClient.disconnect(MAC);

 

你可能感兴趣的:(Android BlueTooth蓝牙使用)