此页面由 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
提供一系列 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。"],[],[]]