BLE编程中关键步骤

Posted hellozay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BLE编程中关键步骤相关的知识,希望对你有一定的参考价值。

 

获取权限

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

 

获取蓝牙适配器的实例

final BluetoothManager bluetoothManager =
        (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();

 

BLE搜索:实例化回调函数->启动/停止扫描

1、实例化回调函数

private BluetoothAdapter.LeScanCallback mLeScanCallback =
        new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(final BluetoothDevice device, int rssi,
            byte[] scanRecord) {
        runOnUiThread(new Runnable() {
           @Override
           public void run() {
               //得到蓝牙设备实例
           }
       });
   }
};

2、启动/停止扫描

mBluetoothAdapter.startLeScan(mLeScanCallback);  //开始扫描
mBluetoothAdapter.stopLeScan(mLeScanCallback);  //停止扫描

 

BLE连接:实例化回调函数 -> 连接并绑定回调函数

1、实例化回调函数

private final BluetoothGattCallback mGattCallback =
            new BluetoothGattCallback() {

         //当连接状态发生改变时会触发
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status,
                int newState) {
            String intentAction;
            if (newState == BluetoothProfile.STATE_CONNECTED) {
                 //当蓝牙设备已经连接
                 ... 
            } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                 //当设备无法连接
                 ...
            }
        }

         // 发现新服务时会触发
        @Override
        public void onServicesDiscovered(BluetoothGatt gatt, int status) {
            if (status == BluetoothGatt.GATT_SUCCESS) {
                ...
            } else {
                ...
            }
        }
         
         // 读写特性
        @Override
        public void onCharacteristicRead(BluetoothGatt gatt,
                BluetoothGattCharacteristic characteristic,
                int status) {
            if (status == BluetoothGatt.GATT_SUCCESS) {
                ...
            }
        }
     ...
    };

2、获取蓝牙设备实例,并连接该蓝牙设备实例。


//
蓝牙地址实例化一个蓝牙设备,或通过上述扫描传入一个引用。 final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
//涉及的三个参数:一个Context对象,自动连接(boolean值,表示只要BLE设备可用是否自动连接到它),和BluetoothGattCallback调用。 private BluetoothGatt mBluetoothGatt = device.connectGatt(this, false, mGattCallback);

 

以上是关于BLE编程中关键步骤的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式添加的片段上的后退键导致空容器

如何在导航控件片段中关闭导航 DrawerLayout onBackPressed

如何从另一个活动或底部工作表对话框/片段中关闭一个活动

是否有任何 C++ opencv 代码来计算每帧视频中关键特征点的速度? [关闭]

TP5报如下的错误 Indirect modification of overloaded element of thinkpaginatorCollection has no effect(代码片段

Spark中关于购物篮的设计