蓝牙BLE开发指南实例

之前在一家公司做过关于蓝牙低功耗的功能,今天有空记录一下。
蓝牙低功耗(Bluetooth Low Energy)是从Android 4.3 (API level 18)新增的,相对于传统来说功耗相对低一些。先来了解一波理论~

这里写图片描述

关键术语和概念:


  • Generic Attribute Profile (GATT)
    GATT配置文件是通过BLE链接发送和接收称为“属性”的短数据段的通用规范。 所有当前的低能耗应用程序配置文件均基于GATT。
    蓝牙SIG为低能耗设备定义了许多配置文件。 配置文件是设备如何在特定应用程序中工作的规范。 请注意,设备可以实现多个配置文件。 例如,一个设备可能包含一个心率监测器和一个电池电量检测器。
  • Attribute Protocol (ATT)
    GATT建立在属性协议(ATT)之上。 这也被称为GATT / ATT。 ATT经过优化,可在BLE设备上运行。 为此,它使用尽可能少的字节。 每个属性由通用唯一标识符(UUID)唯一标识,该标识符是用于唯一标识信息的字符串ID的标准化128位格式。 由ATT传输的属性被格式化为特征和服务。
  • Characteristic
    一个特征包含描述特征值的单个值和0-n个描述符。 一个特征可以被认为是一种类型,类似于一个阶级。
  • Descriptor
    描述符是描述特征值的定义属性。 例如,描述符可以指定一个人类可读的描述,一个特征值的可接受范围,或特征值特定的度量单位。
  • Service
    服务是一系列特征。 例如,您可以使用名为“心率监视器”的服务,其中包含“心率测量”等特征。

  • 蓝牙权限

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

如果您想声明您的应用仅适用于支持BLE的设备,请在应用的清单中包含以下内容:

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>

但是,如果您想让您的应用适用于不支持BLE的设备,则应该在应用的清单中包含此元素,但设置required =“false”。 然后在运行时,您可以使用PackageManager.hasSystemFeature()来确定BLE可用性:

if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
    Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
    finish();
}

1.获取蓝牙适配器BluetoothAdapter

private BluetoothAdapter mBluetoothAdapter;
...
// Initializes Bluetooth adapter.
final BluetoothManager bluetoothManager =
        (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();

2.打开蓝牙

//确保蓝牙在设备上可用并且已启用。 如果不,
//显示一个对话框,请求用户启用蓝牙的权限。
if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

注意:传递给startActivityForResult(android.content.Intent,int)的REQUEST_ENABLE_BT常量是系统在onActivityResult(int,int,android.content)中传回给您的本地定义的整数(它必须大于0)。 意图)实现作为requestCode参数。

3.扫描蓝牙设备

要找到BLE设备,请使用startLeScan()方法。 此方法将BluetoothAdapter.LeScanCallback作为参数。 您必须实现此回调,因为这是如何返回扫描结果。 由于扫描耗电量大,您应遵守以下准则:

一旦找到所需的设备,请停止扫描。
切勿扫描循环,并在扫描上设置时间限制。 之前可用的设备可能已移出范围,并继续扫描电池电量。
注意:6.0的需要加入ACCESS_COARSE_LOCATION 和ACCESS_FINE_LOCATION这2个权限扫描才会返回结果哦!

/**
 * Activity for scanning and displaying available BLE devices.
 */
public class DeviceScanActivity extends ListActivity {
   

    private BluetoothAdapter mBluetoothAdapter;
    private boolean mScanning;
    private Handler mHandler;

    // Stops scanning after 10 seconds.
    private static final long SCAN_PERIOD = 10000;
    ...
    private void scanLeDevice(final boolean enable) {
        if (enable) {
            // Stops scanning after a pre-defined scan period.
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mScanning = false;
                    mBluetoothAdapter.stopLeScan(mLeScanCallback);
                }
            }, SCA
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值