查找 BLE 设备

此页面由 Cloud Translation API 翻译。

Android Developers

Develop

Core areas

Connectivity

指南

查找 BLE 设备

使用集合让一切井井有条

根据您的偏好保存内容并对其进行分类。

要查找 BLE 设备,您可以使用

startScan()

方法。此方法采用

ScanCallback 作为参数。

您必须实现此回调,因为这是返回扫描结果的方式。

由于扫描非常耗电,因此您应该注意以下事项:

指南:

找到所需设备后,立即停止扫描。

永不循环扫描,并始终设置扫描时间限制。具有如下特征的设备:

可能已经超出有效范围,

很耗电。

在以下示例中,BLE 应用提供了一个 activity

(DeviceScanActivity),用于扫描可用的蓝牙 LE 设备和显示屏

向用户列出它们以下代码段展示了如何启动和停止

扫描:

Kotlin

private val bluetoothLeScanner = bluetoothAdapter.bluetoothLeScanner

private var scanning = false

private val handler = Handler()

// Stops scanning after 10 seconds.

private val SCAN_PERIOD: Long = 10000

private fun scanLeDevice() {

if (!scanning) { // Stops scanning after a pre-defined scan period.

handler.postDelayed({

scanning = false

bluetoothLeScanner.stopScan(leScanCallback)

}, SCAN_PERIOD)

scanning = true

bluetoothLeScanner.startScan(leScanCallback)

} else {

scanning = false

bluetoothLeScanner.stopScan(leScanCallback)

}

}

Java

private BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();

private boolean scanning;

private Handler handler = new Handler();

// Stops scanning after 10 seconds.

private static final long SCAN_PERIOD = 10000;

private void scanLeDevice() {

if (!scanning) {

// Stops scanning after a predefined scan period.

handler.postDelayed(new Runnable() {

@Override

public void run() {

scanning = false;

bluetoothLeScanner.stopScan(leScanCallback);

}

}, SCAN_PERIOD);

scanning = true;

bluetoothLeScanner.startScan(leScanCallback);

} else {

scanning = false;

bluetoothLeScanner.stopScan(leScanCallback);

}

}

注意 :

BluetoothLeScanner是

只能通过

BluetoothAdapter(如果蓝牙)

目前在设备上处于启用状态。如果未启用蓝牙,则

getBluetoothLeScanner()

会返回 null。

要仅扫描特定类型的外围设备,您可以改为调用

startScan(List, ScanSettings, ScanCallback)、

提供一系列 ScanFilter

对象,这些对象限制了扫描要查找的设备,

ScanSettings 对象,

指定有关扫描的参数。

以下代码示例是

ScanCallback、

该接口是用于提供 BLE 扫描结果的接口。找到结果后,

它们会添加到 DeviceScanActivity 中的列表适配器中,以显示给

用户。

Kotlin

private val leDeviceListAdapter = LeDeviceListAdapter()

// Device scan callback.

private val leScanCallback: ScanCallback = object : ScanCallback() {

override fun onScanResult(callbackType: Int, result: ScanResult) {

super.onScanResult(callbackType, result)

leDeviceListAdapter.addDevice(result.device)

leDeviceListAdapter.notifyDataSetChanged()

}

}

Java

private LeDeviceListAdapter leDeviceListAdapter = new LeDeviceListAdapter();

// Device scan callback.

private ScanCallback leScanCallback =

new ScanCallback() {

@Override

public void onScanResult(int callbackType, ScanResult result) {

super.onScanResult(callbackType, result);

leDeviceListAdapter.addDevice(result.getDevice());

leDeviceListAdapter.notifyDataSetChanged();

}

};

注意: 您只能扫描低功耗蓝牙设备或扫描传统蓝牙

蓝牙概览。您不能同时扫描这两者

使用蓝牙 LE 和传统设备。

本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。

最后更新时间 (UTC):2025-07-27。

[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-07-27。"],[],[]]


美国签证UID号是什么?如何查询和使用?
9類食物不能直接放入冰箱 家居冷藏常見誤區 千萬唔好咁做!