android+ble蓝牙读写,GitHub - wangchen0338/BleDemo: android BLE蓝牙框架,包括扫描、连接、设置通知、发送数据、读取和接收数据以及各种直观的回调,近乎...

对蓝牙4.0感兴趣可以加群进行相互讨论学习

QQ群:494309361

作者:liulei

Android蓝牙BLE库

本文的api介绍:(BleLib库)

先来看张BleLib库的api之间的关系图:

cb102417c00adb2f7567356f179cd614.png

1、iQppCallback、QppApi

这个两个类封装了完整的读写数据,设置通知等操作 此demo中并未用到这两个接口,此列出方便以后调用。

2、BleDevice

该类的主要是来描述并记录蓝牙的属性和状态,如记录蓝牙名称、蓝牙MAC地址、蓝牙别名(即修改之后的名称)、蓝牙连接状态等。

3、BleConfig

该类是蓝牙配置类,里面包含了蓝牙服务的UUID、蓝牙特征的UUID、描述的UUID、以及蓝牙状态的静态常量值的标记等等,其中蓝牙相关的

UUID的设置是对外提供了接口的,用的时候可以自行传入特定的UUID即可。

4、BleLisenter

该类提供了蓝牙各个状态的接口,此处做成了抽象类,目的是为了可以让用户有条件的去实现想要实现的方法,比如说客户想要在蓝牙扫描开

始的时候添加一些动画效果,那么你就可以实现onStart()方法,然后在其中做你想做的事情,默认是不需要实现的,如果你想要在蓝牙设备

返回数据时做出反应,那就去实现onRead()方法,如果你想在蓝牙连接失败或者超时的情况下去做特殊的处理,你就去实现onError()或者

onConnectTimeOut()方法等等。(如果各位有更好的方式可以留言提示,不胜感激)。

5、BluetoothLeService

该类是最重要的一个类,主要是蓝牙操作中用到的各个方法的实现类,是整个蓝牙的核心功能实现,BleManager是对外提供所有蓝牙操作接口的

管理类,当BluetoothLeService处理之后要把结果返回到BleManager中,然后再由BleManager对外提供接口。

6、BleManager

该类提供了几乎所有你需要用到的方法,包括蓝牙扫描、连接、断开、蓝牙当前连接状态等等,管理了蓝牙操作的所有接口和方法。

使用步骤:

AndroidStudio最新版本依赖地址:compile 'cn.com.superLei:blelibrary:2.0.0'

1.初始化蓝牙(判断设备是否支持BLE,蓝牙是否打开以及6.0动态授权蓝牙权限等)

private void initBle() {

mBle = Ble.getInstance();

Ble.Options options = new Ble.Options();

options.logBleExceptions = true;//设置是否输出打印蓝牙日志

options.throwBleException = true;//设置是否抛出蓝牙异常

options.autoConnect = false;//设置是否自动连接

options.scanPeriod = 12 * 1000;//设置扫描时长

options.connectTimeout = 10 * 1000;//设置连接超时时长

options.uuid_service = UUID.fromString("0000fee9-0000-1000-8000-00805f9b34fb");//设置主服务的uuid

options.uuid_write_cha = UUID.fromString("d44bc439-abfd-45a2-b575-925416129600");//设置可写特征的uuid

mBle.init(getApplicationContext(), options);

}

2.开始扫描

mBle.startScan(scanCallback);

扫描的回调

BleScanCallback scanCallback = new BleScanCallback() {

@Override

public void onLeScan(final BleDevice device, int rssi, byte[] scanRecord) {

Toast.makeText(BleActivity.this, "ssss", Toast.LENGTH_SHORT).show();

synchronized (mBle.getLocker()) {

runOnUiThread(new Runnable() {

@Override

public void run() {

mLeDeviceListAdapter.addDevice(device);

mLeDeviceListAdapter.notifyDataSetChanged();

}

});

}

}

};

3.开始连接

mBle.connect(device, connectCallback);

连接的回调

private BleConnCallback connectCallback = new BleConnCallback() {

@Override

public void onConnectionChanged(BleDevice device) {

if (device.isConnected()) {

setNotify(device);

}

Log.e(TAG, "onConnectionChanged: " + device.isConnected());

mLeDeviceListAdapter.notifyDataSetChanged();

setConnectedNum();

}

@Override

public void onConnectException(BleDevice device, int errorCode) {

super.onConnectException(device, errorCode);

Toast.makeText(BleActivity.this, "连接异常,异常状态码:" + errorCode, Toast.LENGTH_SHORT).show();

}

};

4.设置通知及回调

private void setNotify(BleDevice device) {

/*连接成功后,设置通知*/

mBle.startNotify(device, new BleNotiftCallback() {

@Override

public void onChanged(BluetoothGattCharacteristic characteristic) {

Log.e(TAG, "onChanged: " + Arrays.toString(characteristic.getValue()));

}

@Override

public void onReady(BleDevice device) {

Log.e(TAG, "onReady: ");

}

@Override

public void onServicesDiscovered(BluetoothGatt gatt) {

Log.e(TAG, "onServicesDiscovered is success ");

}

@Override

public void onNotifySuccess(BluetoothGatt gatt) {

Log.e(TAG, "onNotifySuccess is success ");

}

});

}

5.读取远程Rssi

mBle.readRssi(mBle.getConnetedDevices().get(0), new BleReadRssiCallback() {

@Override

public void onReadRssiSuccess(int rssi) {

super.onReadRssiSuccess(rssi);

Log.e(TAG, "onReadRssiSuccess: " + rssi);

Toast.makeText(BleActivity.this, "onReadRssiSuccess:"+ rssi, Toast.LENGTH_SHORT).show();

}

});

5.写入数据

boolean result = mBle.write(device, changeLevelInner(), new BleWriteCallback() {

@Override

public void onWriteSuccess(BluetoothGattCharacteristic characteristic) {

Toast.makeText(BleActivity.this, "发送数据成功", Toast.LENGTH_SHORT).show();

}

});

if (!result) {

Log.e(TAG, "changeLevelInner: " + "发送数据失败!");

}

6.Demo效果演示图:

9c103a55853e2ae9abc2a61a4c1a7f8b.gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值