轻松上手 Android蓝牙基础开发(2)

  • 描述符

是用来定义特征值的已定义属性。用来描述特征值的。例如:描述符可以指定人类可读的描述,特征值的可接受范围或者特征值特定的度量单位

  • 服务

服务中包含一系列的特征值。例如,我们可以使用名为 “心率监测器”的服务,其中包括"心率测量"等特征。可以在 http://bluetooh.org 上找到基于 GATT 的现有配置文件的服务的列表。

角色和责任

Android 设备和 BLE 设备交互时应用的角色和职责

  • 中央与外围设备。

  • GATT 服务器和 GATT 客户端。确定了两个设备建立连接后如何进行相互通信

BLE 权限

应用在使用蓝牙设备的时候必须要声明蓝牙权限 BLUETOOTH 需要这个权限才可以进行蓝牙通信,例如:请求连接、接受连接、和传输数据。

如果还需要发现或者操作蓝牙设置,则需要声明 BLUETOOTH_ADMIN 权限。使用这个权限的前提是要有 BLUETOOTH 权限。

如果要声明我们的应用仅适用于支持 BLE 的设备,需要清单文件中做如下声明

如果我们希望我们的应用程序在不支持 BLE 的设备上也可以运行的时候,只需要将 true 修改成 false 就可以了。

还可以在代码中作出判断

if(!getPackageManager().hasSystemFeature(PackgeManger.FEATURE_BLUETOOTH_LE)){

// 不支持 BLE 设备

}

BLE 通常和位置有关系,因此还需要声明位置权限 ACCESS_COARSE_LOCATION 或者 ACCESS_FINE_LOCATION 没有这些权限扫描将不会返回任何结果。

设置 BLE

  1. 获得 BluetoothAdapter

BluetoothAdapter 代表设备自己的蓝牙适配器,整个系统只有一个蓝牙适配器,我们的应用程序可以使用此对象与其交互。

这里的获取方法是通过 BluetoothManager 来获取的

BluetoothManager bluetoothManger = getSystemSerive(Context.BULETOOTH_SERVIcE); BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();

  1. 启用蓝牙设备

其实这些和普通蓝牙的启动都是一样的。

isEnable() 查看当前是否启用了蓝牙

通过 BluetoothAdapter.ACTION_REQUEST_ENABLE 来启动

  1. 查找 BLE 设备

这一点和发现普通的蓝牙设备是不一样的

// 通过 Adapter 的 startLeScan(callBack); 方法来开启扫描 // 如果我们有指定的蓝牙设备可以使用 sartLeScan(UUID[],BluetoothAdapter.LeScanCallBakc) 通过 UUID 来指定 BLe // 这个方法已经过时了,官方文档最新支持的扫描蓝牙的方法是通过一个专门的对象 BluetoothLeScanner 用来开启扫描低功耗蓝牙 BluetoothLeScanner scanner = bluetoothAdapter.getBluetoothLeScanner(); // 这个方法可以有参数,用来过滤要扫描的低功耗蓝牙的,具体的后面讲 scanner.startScan();

只能单独扫描普通蓝牙设备或者 BLE 设备,没有方法同时执行

连接到 GATT 服务器

与 BLE 设备通信,第一步就是要连接到它,就是连接到该设备的 GATT 服务。使用方法 connectGatt()有三个参数:Context 对象 autoConnect (表示是否在可用的时候自己连接到 BLE 设备) 还有一个回调,所有的交互都在这个回调里面完成。

调用这个方法会返回一个 BluetoothGatt对象,通过这个对象进行和 BLE 设备的交互。交互的结果会在回调方法中触发。

public class BluetoothLeService extends Service{

private final static String TAG = BluetoothLeService.class.getSimpleName();

private BluetoothManger bluetoothManger;

private BluetoothAdapter bluetoothAdapter;

private String bluetoothDeviceAddress;

private BluetoothGatt bluetoothGatt;

private int connectionState = STATE_DISCONNECTED;

private static final int STATE_DISCONNECTED = 0;

private static final int STATE_CONNETING = 1;

private static final int STATE_CONNECTED = 2;

public final static String ACTION_GATT_CONNECTED = “com.example.bluetooth.le.ACTION_GATT_CONNECTED”;

public final static String ACTION_GATT_DISCONNECTED = “com.example.bluetooth.le.ACTION_GATT_DISCONNECTED”;

public final static String ACTION_GATT_SERVICES_DISCOVERED = “com.example.bluetooth.le.ACTION_GATT_SERVICES_DISCOVERED”;

public final satic String ACTION_DATA_AVAILABLE = “com.example.bluetooth.le.ACTION_DATA_AVAILABLE”;

public final static String EXTRA_DATA = “com.example.bluetooth.le.EXTRA_DATA”;

public final static UUID UUID_HEART_RATE_MEASUREMENT = UUID.formString(SampleGattAttributes.HEART_RATE_MEASURMENT);

private final BluetoothGattCallback gattCallback = new BluetoothGattCallback(){

// 你的中央设备连接上 ble 设备后,会回调这个这方法。

@Override

public viod onConnectionStateChange(BluetoothGatt gatt,int status,int newState){

String intenAction;

if(newState == BluetoothProfile.STATE_CONNECTED){

intentaction = ACTION_GATT_CONNECTED;

connectionState = STATE_CONNECTED;

broadcastUpdate(intentAction);

// 连接上后,紧接着就是要寻找里面 Service

bluetoothGatt.discoverServices();

}else if(newState = BluetoothProfile.STATE_STATE_DISCONNECTED{

intentAction = ACTION_GATT_DISCONNECTED;

connectionState = STATE_DISCONNECTED;

broadcastUpdate(intentAction);

最后

针对于上面的问题,我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

image

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。**

[外链图片转存中…(img-PdXLoxT4-1715414255210)]

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值