65.9K
CodeProject 正在变化。 阅读更多。
Home

BluetoothKit---Android 蓝牙框架

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.15/5 (5投票s)

2016年9月24日

CPOL
viewsIcon

20784

一个允许轻松访问与 BluetoothLE 设备通信的库。

引言

这个库允许轻松访问蓝牙设备扫描和连接,支持自定义扫描策略,并解决了许多 Android 蓝牙固有的兼容性和稳定性问题,请参考 Android 4.3 Bluetooth Low Energy unstable

项目:https://github.com/dingjikerbo/BluetoothKit

要求

  • minSdkVersion 应该不低于 18

  • AndroidManifest.xml 中的权限

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

<uses-feature
    android:name="android.hardware.bluetooth_le"
    android:required="true" />

用法

1、如果您使用 Gradle 构建,只需将以下行添加到您的 build.gradle 文件的 dependencies 部分

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

2、像下面这样创建一个 BluetoothClient:

BluetoothClient mClient = new BluetoothClient(context);

扫描设备

这个库同时支持蓝牙 LE 设备扫描和经典设备扫描,您可以像下面这样自定义扫描策略

SearchRequest request = new SearchRequest.Builder()
        .searchBluetoothLeDevice(3000, 3)   // scan Bluetooth LE device for 3000ms, 3 times
        .searchBluetoothClassicDevice(5000) // then scan Bluetooth Classic device for 5000ms, 1 time
        .searchBluetoothLeDevice(2000)      // at last scan Bluetooth LE device for 2000ms
        .build();

mClient.search(request, new SearchResponse() {
    @Override
    public void onSearchStarted() {

    }

    @Override
    public void onDeviceFounded(SearchResult device) {

    }

    @Override
    public void onSearchStopped() {

    }

    @Override
    public void onSearchCanceled() {

    }
});

您可以通过一行代码停止整个扫描

mClient.stopSearch();

蓝牙 LE 连接

● 连接

BleGattProfile 包含所有服务和特征 UUID。

mClient.connect(MAC, new BleConnectResponse() {
    @Override
    public void onResponse(int code, BleGattProfile profile) {
        if (code == REQUEST_SUCCESS) {

        }
    }
});

● 连接状态

mClient.registerConnectStatusListener(MAC, mBleConnectStatusListener);

private final BleConnectStatusListener mBleConnectStatusListener = new BleConnectStatusListener() {

    @Override
    public void onConnectStatusChanged(int status) {
        if (status == STATUS_CONNECTED) {

        } else if (status == STATUS_DISCONNECTED) {

        }
    }
};

mClient.unregisterConnectStatusListener(MAC, mBleConnectStatusListener);

● 断开连接

mClient.disconnect(MAC);

● 读取特征

mClient.read(MAC, serviceUUID, characterUUID, new BleReadResponse() {
    @Override
    public void onResponse(int code, byte[] data) {
        if (code == REQUEST_SUCCESS) {

        }
    }
});

● 写入特征

要写入的数据不应超过 20 字节。

mClient.write(MAC, serviceUUID, characterUUID, bytes, new BleWriteResponse() {
    @Override
    public void onResponse(int code) {
        if (code == REQUEST_SUCCESS) {

        }
    }
});

// with WRITE_TYPE_NO_RESPONSE
mClient.writeNoRsp(MAC, serviceUUID, characterUUID, bytes, new BleWriteResponse() {
    @Override
    public void onResponse(int code) {
        if (code == REQUEST_SUCCESS) {

        }
    }
});

● 打开通知

mClient.notify(MAC, serviceUUID, characterUUID, new BleNotifyResponse() {
    @Override
    public void onNotify(UUID service, UUID character, byte[] value) {

    }

    @Override
    public void onResponse(int code) {
        if (code == REQUEST_SUCCESS) {

        }
    }
});

● 关闭通知

mClient.unnotify(MAC, serviceUUID, characterUUID, new BleUnnotifyResponse() {
    @Override
    public void onResponse(int code) {
        if (code == REQUEST_SUCCESS) {

        }
    }
});

● 读取 RSSI

mClient.readRssi(MAC, new BleReadRssiResponse() {
    @Override
    public void onResponse(int code, Integer rssi) {
        if (code == REQUEST_SUCCESS) {

        }
    }
});

● 刷新缓存

在下一次连接开始时刷新缓存。

mClient.refreshCache(MAC);

© . All rights reserved.