Android中的BLE开发:蓝牙扫描设备一

看官们,我们在上一章回中介绍了BLE开发中蓝牙扫描前的准备工作,本章回中我们将介绍BLE开发中的"蓝牙扫描设备",闲话休提,言归正转。让我们一起Talk Android吧!

我们在本章回中通过代码结合文本的方式介绍如何扫描蓝牙设备,下面是官方文档中给出的示例代码:

public class DeviceScanActivity extends ListActivity {

    private BluetoothAdapter bluetoothAdapter;
    private boolean mScanning;
    private Handler handler;

    // 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.
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mScanning = false;
                    bluetoothAdapter.stopLeScan(leScanCallback);
                }
            }, SCAN_PERIOD);

            mScanning = true;
            bluetoothAdapter.startLeScan(leScanCallback);
        } else {
            mScanning = false;
            bluetoothAdapter.stopLeScan(leScanCallback);
        }
        ...
    }
...
}

该代码使用了BluetoothAdapter的startLeScan方法实现扫描工作,并且定义了一个扫描时间,如果超过该时间会自动停止扫描;这么做是为了节省电量,因为扫描操作非常消耗电量,而且官方对扫描操作给了以下建议:

找到所需设备后,立即停止扫描。
绝对不进行循环扫描,并设置扫描时间限制。之前可用的设备可能已超出范围,继续扫描会耗尽电池电量。

有看官问代码中使用的BluetoothAdapter如何才能获取到?可以参考以下代码:

BluetoothManager bluetoothManager =
 (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
bluetoothAdapter = bluetoothManager.getAdapter();

BluetoothAdapter是一个非常重要的类,我们打开系统蓝牙开关时也会使用它。

使用BluetoothAdapter的startLeScan方法时最重要的是它的参数,该参数是一个LeScanCallback类型的变量,我们需要实现其中的方法,详细的代码(参考官方文档)如下:

private BluetoothAdapter.LeScanCallback leScanCallback = new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(final BluetoothDevice device, int rssi,
            byte[] scanRecord) {
            //do something. such as get device
           }
       });
   }
};

在实现LeScanCallback的onLeScan方法时,我可以通过该方法的参数得到当前扫描到的蓝牙设备:device,如果扫描不到任何设备,参数值为空。device是BluetoothDevice类型的对象,它里面包含了蓝牙设备的名称和地址。这是非常有用的信息。另外一个参数rssi表示蓝牙设备的信号强度,这个是一个参考值,不一定很准确,它会随着设备的角度不同而变化。

看官们,Android在扫描蓝牙时使用了回调函数这种设计方式,我们使用一个方法进行扫描,该方法只负责扫描,扫描的结果却放在回调方法里,希望大家能够从整体的角度来理解这种设计方式。

各位看官,关于Android中蓝牙扫描设备的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

转载于:第二百八十一回:Android中的BLE开发:蓝牙扫描设备一 - 知乎

下一篇:​​​​​​​Android中的BLE开发:蓝牙扫描设备二_今人不见古时月,今月曾经照古人的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/weixin_42602900/article/details/125987893