对蓝牙感兴趣可以加群讨论学习(QQ:494309361)

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

1、BleDevice

该类的主要是来描述并记录蓝牙的属性和状态,如记录蓝牙名称、蓝牙MAC地址、蓝牙别名(即修改之后的名称)、蓝牙连接状态等,该类处在被保护状态,禁止外部随意生成该对象,

如果有特别需求可以通过BleFactory.create(...)进行创建该对象(并不建议)

2、BleStatus

该类是蓝牙状态类,定义了蓝牙扫描、连接、通知使能、发送、接收等状态的常量值(连接异常等状态码可参考该类)

3、BluetoothLeService

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

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

4、Ble

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

二、历史版本介绍:

该版本添加跳转到测试界面(先连接设备),在测试界面操作该蓝牙对象的扫描、连接、断开、通知等回调的接口(任意界面都可以随心所欲的操作或者拿到mcu返回的数据)

1、在其他界面你也想拿到蓝牙设备传过来的数据,你可以这样做:(重要)

//测试通知

public void testNotify(BleDevice device) {

if(device != null){

mNotifyStatus.setText("设置通知监听成功!!!");

mBle.startNotify(device, new BleNotiftCallback() {

@Override

public void onChanged(BluetoothGattCharacteristic characteristic) {

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

mNotifyValue.setText("收到MCU通知值:\n"+Arrays.toString(characteristic.getValue()));

}

});

}

}

2、在其他界面也想连接或者断开上个界面的设备对象,你可以这么做:

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

//测试连接或断开

final BleDevice device = mLeDeviceListAdapter.getDevice(position);

if (device == null) return;

if (mBle.isScanning()) {

mBle.stopScan();

}

if (device.isConnected()) {

//2.1.0版本新增接口(mBle.disconnect(device)接口仍可正常使用)

mBle.disconnect(device, connectCallback);

} else if (!device.isConnectting()) {

mBle.connect(device, connectCallback);

}

}

});

3、扫描、发送数据、读取数据等接口都可如上正常使用(与之前版本一样)

该版本添加根据蓝牙地址获取蓝牙对象的接口

该版本修复读、写、通知特征uuid相同的情况下,出现无法设置通知的BUG

该版本优化内部api结构,但并不影响外部接口调用

该版本增加主动读取数据以及读取远程RSSI值的接口

该版本重构V 1.x版本,作为全新升级版本,重大类、接口进行重命名,使各个接口完成单一功能,并使之得到单一功能的回调。

注:至此V 2.0.0版本以后不再维护1.x版本

增加了自动连接的接口

初始版本,可完成基本的BLE蓝牙一系列操作(扫描、连接、断开、设置通知、发送数据等等)

三、使用步骤:

首先buidl.gradle中添加依赖:

compile 'cn.com.jerry:blelibrary:2.1.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: " + "发送数据失败!");

}

四、Demo效果演示图:

android蓝牙开源,开源蓝牙框架 Android-BLE相关推荐

  1. Android蓝牙开发 — 经典蓝牙BLE蓝牙

    一,前期基础知识储备 1)蓝牙是一种支持设备之间短距离通信的无线电技术(其他还包括红外,WIFI): 支持移动电话.笔记本电脑.无线耳机等设备之间进行信息的交换: Android支持的蓝牙协议栈:Bl ...

  2. Android客户端开发—开源数据库框架LitePal

    LitePal是一款开源的Android数据库框架,采用对象关系映射(ORM)模式,将常用的数据库功能进行封装,不使用SQL语句就可以完成创建表以及表单的CRUD操作,并且很轻量级,几乎零配置.(它将 ...

  3. Android开发常用开源框架:图片处理

    1. 图片加载,缓存,处理 框架名称 功能描述 Android Universal Image Loader 一个强大的加载,缓存,展示图片的库,已过时 Picasso 一个强大的图片下载与缓存的库 ...

  4. android平台的开源框架的思考

    转载:http://www.oschina.net/question/3962_2144612 现在我要开发移动端的在线考试平台,在做开发框架技术选型.以及集成开发环境技术选型的时候,有点犹豫不决,请 ...

  5. Android常用的第三方开源库和框架

    第三方开源库和组件 一个专注于平滑滚动的Android图像加载和缓存库 https://github.com/bumptech/glide 图片缓存Universal-Image-Loader: ht ...

  6. Android 2018优秀开源框架整理收藏

    中级.高级.资深工程师 知其然知其不可然 <框架百大排行榜>里所提到的流行词.流行术语--使用能力.融会贯通其原理.讲解框架能力的高低,将让你不断的在这三个级别徘徊: 会有意识的合并榜单里 ...

  7. Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别

    找到一篇介紹BT与BLE使用差别的文章, 写的很清晰,看完基本明白了 ----------------------------------------------------------------- ...

  8. 腾讯竟然又偷偷开源了一套Android原生UI框架!不吃透都对不起自己

    起因 事情是这样的. 4年前毕业那会,呆在公司的短视频项目,做 视频.那会做得比抖音还早,但是由于短视频太烧钱了,项目被公司关掉了.当时需要开发横竖屏直播/异步视频的场景,就研究下了市场上的 app, ...

  9. android 优秀的开源框架整理

    程序员界有个神奇的网站,那就是github,这个网站集合了一大批优秀的开源框架,极大地节省了开发者开发的时间,在这里我进行了一下整理,这样可以使我们在使用到时快速的查找到,希望对大家有所帮助! 1. ...

最新文章

  1. 轻量级HTTP服务器Nginx(配置与调试Nginx)(转)
  2. 写文件 —— 将内容按照指定格式写入配置文件(fwrite()函数-》》向指定的文件中写入若干数据块)
  3. 字符串中斜杠换行注意事项之-多余空格
  4. hdu 5265 pog loves szh II STL
  5. 信号捕捉(signal、sigaction)
  6. Hbase新API以及Hbase增删改差
  7. The Classic IQ Test
  8. 【Matlab】Plot的用法详解
  9. 【裂缝识别】基于matlab GUI无人机裂缝图像处理系统(带面板)【含Matlab源码 1727期】
  10. 简述html文档的基本,网页制作简答题答案
  11. createdroptargets_拖拽神器React DnD你真的了解了吗?
  12. 服务器(Windows镜像)自建git服务器超详细教程
  13. 如何把 json对象转换成 数组
  14. windos读写ext3工具_Win7下读写Ext2/Ext3/Ext4文件系统
  15. Vue实现状态的不同颜色
  16. go服务器验证苹果账号登录
  17. 工程师为什么不转销售
  18. web和APP兼容性测试的关注点(软件测试)
  19. 超实用流程图制作技巧,制作流程图so easy
  20. sns jointplot 和 子图

热门文章

  1. 圣诞节快到了,教大家用Python画一个简单的圣诞树和烟花,送给那个她
  2. python朋友圈头像_Python读取微信好友头像,拼成祝福语九宫格
  3. 【人脸识别】FaceNet(二)
  4. 教你代码实现抢红包功能
  5. Android P 图形显示系统(四) Android VirtualDisplay解析
  6. 超声波塑料焊接电源发生器电控箱设计
  7. sql server基础语句大全
  8. XX图文扩容配置说明
  9. DCB工作机制解析三(CN)
  10. python renamer模块_python - 发布自己的模块(脚本) 到pypi.org