最近在做一个蓝牙的项目,是Blu4.0,Android系统支持是4.3版本以上(为此特地卖了个手机,)。

当然也参考了不少大牛的的微博,说的都不错,再次特地感谢

http://blog.csdn.net/hellogv/article/details/6036849

http://blog.csdn.net/hellogv/article/details/6042091

http://www.cnblogs.com/zdz8207/archive/2012/10/17/bluetooth_ble_android.html

http://blog.csdn.net/changemyself/article/details/8454633

http://blog.csdn.net/hellogv/article/details/24267685

调试Ble硬件的读写的App

http://www.wandoujia.com/apps/com.siflink.ble.mgr

这个App,可以在自己app为开发好的情况下,简单的测试下读写特征值,不知道为什么,好像只能写入一个值。也许是我不知道怎么写入多个值。

下面这个是从github上搜索的一个ble4.0的代码

https://github.com/StevenRudenko/BleSensorTag

网上有很多关于Ble4.0的开发,再次也不做介绍,反正都是差不多的。

1、声明蓝牙的权限

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

2、监听搜索的回调

BleBluetoothGattCallback gattCallback = new BleBluetoothGattCallback();
gattCallback.setOnBleReadCallback(new OnBleReadCallback() {
public void onReadData(byte[] data) { } public void onReadComple() {
McLog.mByStackTrace();
} public void onConnect() {
showToast("连接设备成功");
isConnect = true;
} public void onDisConnect() {
showToast("断开设备");
isConnect = false;
}
});
BluetoothAdapter.LeScanCallback leScanCallback = new BluetoothAdapter.LeScanCallback() {
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
McLog.mByStackTrace();
String address = device.getAddress();
String name = device.getName();
String t = name + "[" + address + "]";
McLog.i("find a device %s", t); if (isRightDevice(device)) { // 判断是否是自己的想要的设备
btAdapter.stopLeScan(this);
// 进行请求的链接
device.connectGatt(context, false, gattCallback);
McLog.i("device %s is this account's.", t);
} else {
McLog.i("device %s is not this account's.", t);
}
}
}; BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
btAdapter = bluetoothManager.getAdapter();
btAdapter.startLeScan(leScanCallback);

3、设置请求链接的回调

public class BleBluetoothGattCallback extends BluetoothGattCallback {

	public static final UUID SERVER_UUID = UUID.fromString("0000FFF0-0000-1000-8000-00805F9B34FB");

	OnBleReadCallback onBleReadCallback;

	public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { // 链接状态的改变的回调
McLog.mByStackTrace();
McLog.i("status = " + status);
McLog.i("newState = " + newState);
switch (newState) {
case BluetoothProfile.STATE_CONNECTED:
McLog.e("STATE_CONNECTED"); // 链接成功
gatt.discoverServices();
if (onBleReadCallback != null) {
onBleReadCallback.onConnect();
}
break;
case BluetoothProfile.STATE_DISCONNECTED:
gatt.close();
McLog.e("STATE_DISCONNECTED");// 断开链接
if (onBleReadCallback != null) {
onBleReadCallback.onDisConnect();
}
break;
case BluetoothProfile.STATE_CONNECTING:
McLog.e("STATE_CONNECTING");
break;
case BluetoothProfile.STATE_DISCONNECTING:
McLog.e("STATE_DISCONNECTING");
break;
}
} public void onServicesDiscovered(final BluetoothGatt gatt, int status) { // <span style="font-family: Arial, Helvetica, sans-serif;">发现服务的回调</span>
McLog.mByStackTrace();
McLog.i("status = " + status);
if (status == BluetoothGatt.GATT_SUCCESS) {
BluetoothGattService service = gatt.getService(SERVER_UUID);
McLog.i("service = " + service);
if (service != null) {
// 找到服务后,可以进行读取数据和写入数据
}
} else {
// McToastUtil.show("discover services fail.");
}
} public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {// 读取特征值的回调
McLog.i("onCharacteristicRead");
UUID currentUUId = characteristic.getUuid();
McLog.i("currentUUId = " + currentUUId);
if (currentUUId == null) {
return;
}
// 数据的内容
byte[] data = characteristic.getValue();
McLog.i("data = " + Arrays.toString(data));
} public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {// 写入特征值回调
McLog.i("onCharacteristicWrite status = " + status);
} public void setOnBleReadCallback(OnBleReadCallback onBleReadCallback) {
this.onBleReadCallback = onBleReadCallback;
} public interface OnBleReadCallback { // 自己定义的回调 void onConnect(); void onReadData(byte[] data); void onReadComple(); void onDisConnect();
}
}

最后特别重要的是,一定好配合硬件工程师调试蓝牙。

Android Ble4.0开发的更多相关文章

  1. android 5.0开发环境搭建

    Android 5.0 是 Google 于 2014 年 10 月 15 日发布的全新 Android 操作系统.本文将就最新的Android 5.0 开发环境搭建做详细介绍. 工具/原料 jdk- ...

  2. 搭建Android 5.0开发环境

    1.Android SDK的安装 下载地址:http://developer.android.com/index.html 访问网站的话请自备梯子 选择:adt-bundle-windows-x86_ ...

  3. Android 6.0 开发人员对系统权限的使用与练习(Permissions Best Practices)

    Permissions Best Practices 在安装的过程中,用户非常easy忽略权限请求. 假设一个用户相应用感觉沮丧或者操心泄漏个人信息,那么这些用户就会不用他或者卸载它. 怎样规避这个问 ...

  4. 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体解释

    转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50909410 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体 ...

  5. Android 5.0 开发者官方网站疏理知识结构

    Android 5.0 开发人员官网知识结构疏理 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公 ...

  6. Android 7.0 行为变更

    Android 7.0 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更.本文重点介绍您应该了解并在开发应用时加以考虑的一些主要变更. 如果您之前发布过 Android 应用,请注意 ...

  7. Android 4.0的图形硬件加速及绘制技巧

    转:http://zuiniuwang.blog.51cto.com/3709988/721798 从Android 3.0开始,Android 2D的绘制流程就设计为能够更好地支持硬件加速.使用GP ...

  8. Android 7.0新特性

    还望支持个人博客站:http://www.enjoytoday.cn 由于google目前不是无法直接在国内访问,故此,对于android 开发平台的7.0新特性做个保存.也可供大家查阅.原文转自an ...

  9. Android Studio 0.4 + PhoneGap 3.3 开发环境的搭建

    最近在尝试HTML5移动平台下的开发 由于安卓的方便性,首先开始了安卓的试验 现在安卓下的开发工具首选 Android Studio (写这文章的时候,是0.4) 而跨平台的HTML5 App比较出名 ...

随机推荐

  1. linux磁盘管理(RHEL)

    IDE硬盘名称格式为/dev/hdXY,其中X为a-z的小写字母,Y为数字1-4(一块硬盘最多能分4个主分区).如hda1,表示第一块硬盘的第一个分区.hdb3表示第二块硬盘的第三个分区.还有如Pri ...

  2. pthread_once 和 pthread_key

    http://blog.csdn.net/rickyguo/article/details/6259410 一次性初始化 有时候我们需要对一些posix变量只进行一次初始化,如线程键(我下面会讲到). ...

  3. python之基础补充

    一 bit,和bytes的关系 bit:就是计算机的最小的表示单位. bytes:就是计算机的最小的储存单位. 1  字节(bytes) = 8 位(bit) 格式: print(bytes('字符' ...

  4. 2018.10.01 NOIP模拟 偷书(状压dp)

    传送门 状压dp经典题. 令f[i][j]f[i][j]f[i][j]表示到第i个,第i−k+1i-k+1i−k+1~iii个物品的状态是j时的最大总和. 然后简单维护一下转移就行了. 由于想皮一下果 ...

  5. 用org.mybatis.generator 生成代码

    1:引入pom 2:增加生成配置xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  6. 破解Unity5.3.4f1

    破解的目的是将受限的个人版变为全功能的Pro版,破解后就可以使用所有功能了,界面也变成了黑色的主题. 破解网址(支持最新版的5.3.4f1): http://www.ceeger.com/forum/ ...

  7. hadoop学习笔记(一):概念和组成

    一.什么是hadoop Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架.它支持在商品硬件构建的大型集群上运行的应用程序.Hadoop是根据G ...

  8. centos6 mysql 安装与配置

    MySQL简介: 由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库.MySQL是一个多用户.多线程的关系型数据库管理 ...

  9. webservice大文件怎么传输

    版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...

  10. 磁盘配额(Quota)的应用与实践

    1>什么是Quota      在Linux中,由于是多用户,多任务的环境,所以会有多用户共同使用一个硬盘空间的情况发生,如果其中有少数几个用户大量占用掉了硬盘空间的话,那肯定影响其他用户的使 ...