Android ble 4.0相关知识总结
来源:互联网 发布:数据库电子书下载 编辑:程序博客网 时间:2024/05/17 01:21
一、设备要求
1.Android 4.3(SDK VERSION >= 18),4.3的android手机只能作为主机设备,而不能作为外围设备。
2.android 5.0 支持主机也支持外围设备
<uses-sdk android:minSdkVersion="18" android:targetSdkVersion="19" />
二、开发的时候需要添加的权限
<uses-permission android:name="android.permission.BLUETOOTH"/><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
三、利用api判断android手机是否支持ble
if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE )) { Toast.makeText(getActivity(), "支持", Toast.LENGTH_SHORT).show();}else{ Toast.makeText(getActivity(), "不支持", Toast.LENGTH_SHORT).show();}
四、开启蓝牙
// 初始化 Bluetoothadapter, 通过蓝牙管理器得到一个参考蓝牙适配器(API必须在以上android4.3或以上和版本) BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter(); //如果蓝牙未开启就开启蓝牙 if (!bluetoothAdapter.isEnabled()) { bluetoothAdapter.enable(); }
五、开始搜索BLE设备
<span style="font-size:10px;">bluetoothAdapter.startLeScan(leScanCallback); //其中leScanCallback为扫描的回调接口定义如下所示LeScanCakkback leScanCallback = new BluetoothAdapter.LeScanCallback() { @Override public void onLeScan( BluetoothDevice bluetoothDevice, int i, byte[] bytes) { // do something } };</span>
回调函数onLeScan()中的三个参数分别为device:蓝牙设备,rssi:设备返回的接收信号强度, scanRecord:设备广播消息
六、绑定BLE设备以及解除绑定BLE设备
1.绑定BLE设备
/** * 绑定BLE设备 */ public static Boolean bondDevice(BluetoothDevice bluetoothDevice) { Boolean returnValue; try { Class class1 = Class.forName("android.bluetooth.BluetoothDevice"); Method createBondMethod = class1.getMethod("createBond"); returnValue = (Boolean) createBondMethod.invoke(bluetoothDevice); } catch (Exception e) { returnValue = false; } return returnValue; }2.解除绑定BLE设备
/** * 解除绑定 * @param bluetoothDevice * @return */ public static Boolean unBondDevice(BluetoothDevice bluetoothDevice) { boolean returnValue; try { Method m = bluetoothDevice.getClass().getMethod("removeBond"); returnValue = (Boolean) m.invoke(bluetoothDevice); } catch (Exception e) { returnValue = false; } return returnValue; }
七、连接BLE设备,连接成功后的到相关的service以及characteristic
/** * 连接BLE设备 * * @param bluetoothDevice * @return */ public boolean connect(final BluetoothDevice bluetoothDevice) { if (bluetoothDevice == null) { return false; } new Thread(new Runnable() { @Override public void run() { bluetoothDevice.connectGatt(BluetoothLEService.this, true, new BluetoothGattCallback() { //BluetoothGattCallback 为回调接口 @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { //该函数为连接状态改变的函数 if (newState == BluetoothProfile.STATE_CONNECTED) { Log.d(TAG, "连接成功"); Log.d(TAG, "开始搜索服务:"); gatt.discoverServices() ; //连接成功之后就可以开始搜索服务 } else if (newState == BluetoothProfile.STATE_DISCONNECTED) { close(gatt); Log.d(TAG, "断开连接."); } else { Log.d(TAG, "连接失败" + newState); } } @Override public void onServicesDiscovered(final BluetoothGatt gatt, int status) { //发现服务的回调函数 if (status == BluetoothGatt.GATT_SUCCESS) { // 根据uuid得到读服务 BluetoothGattService readService = gatt.getService(UUID.fromString("0000ffe0-0000-1000-8000-00805f9b34fb")); if (null != readService) { BluetoothGattCharacteristic readCharacteristic = readService.getCharacteristic(UUID.fromString("0000ffe4-0000-1000-8000-00805f9b34fb")) if (null != readCharacteristic) { //是否接收通知,收到的通知会通过onCharacteristicChanged回调函数返回 gatt.setCharacteristicNotification(readCharacteristic, true); gatt.readCharacteristic(readCharacteristic); // 读取数据,读取的结果通过onCharacteristicRead回调返回。 } } //得到写操作的服务以及写操作的特征值 BluetoothGattService writeService = gatt.getService(UUID.fromString("0000ffe5-0000-1000-8000-00805f9b34fb")); if (null != writeService) { //再得到特征值 BluetoothGattCharacteristic writeCharaceristic = writeService.getCharacteristic(UUID.fromString("0000ffe9-0000-1000-8000-00805f9b34fb")); } } else { Log.d(TAG, "发现服务的状态: " + status); } } @Override public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { //读取数据的结果会通过这个回调函数返回来 if (status == BluetoothGatt.GATT_SUCCESS) { byte[] value = characteristic.getValue(); // 得到数据 analyticFrame(value,gatt,bluetoothDevice); //这是我自己程序中定义的解析数据的方法, } else { Log.d(TAG, "发现特征值的状态" + status); } } //特征值状态改变的回调函数 @Override public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { byte[] value = characteristic.getValue(); //得到数据 analyticFrame(value,gatt,bluetoothDevice);//这是我自己程序中定义的解析数据的方法, } @Override public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { //写操作成功与否的回调函数 super.onCharacteristicWrite(gatt, characteristic, status); if (status == BluetoothGatt.GATT_SUCCESS) { Log.d("TAG", "写成功"); } } }); } }).start(); return true; }
接口中有9个方法可以重写,这里只重写了几个常用的方法。
八、断开连接
/** * 断开连接 */public void disconnect() { if (mBluetoothAdapter == null || mBluetoothGatt == null) { Log.w(TAG, "BluetoothAdapter not initialized"); return; } mBluetoothGatt.disconnect(); }
九、释放资源
/** * 释放资源 */ public void close(BluetoothGatt mBluetoothGatt) { if (mBluetoothGatt == null) { return; } mBluetoothGatt.close(); mBluetoothGatt = null; }
0 0
- Android ble 4.0相关知识总结
- BLE GAP 相关知识
- 蓝牙BLE相关知识
- Android ble 蓝牙4.0 总结
- Android ble 蓝牙4.0 总结
- android usb相关知识总结
- Android屏幕相关知识总结
- Android Activity相关知识总结
- Android蓝牙BLE低功耗相关简单总结
- Android蓝牙BLE低功耗相关简单总结
- Android蓝牙BLE低功耗相关简单总结
- Android蓝牙4.0 BLE开发坑总结
- Android 蓝牙4.0 BLE 开发总结
- Android蓝牙4.0 BLE开发坑总结
- Android BLE 开发总结
- [Android实例] BLE总结
- Android BLE开发总结
- Android BLE总结
- 工业物联网浪潮下蓬勃发展的产业
- 会声会影安装问题(安装完成无法打开显示停止运行)
- ZooKeeper系列之四:ZooKeeper的配置
- 递归方法:例题
- Invoke()/BeginInvoke()区别
- Android ble 4.0相关知识总结
- ROS 监控制线程通过setDaemon 设置为随启动线程退出
- 正则表达式学习3
- List、Set、Map、数组之间各种转换
- 学习unity遇到的问题
- char *a 与char a[] 的区别
- Leetcode (307) Range Sum Query - Mutable
- 37. Sudoku Solver(dfs)
- 计算机硬件架构示意图