【发布时间】:2018-01-05 13:27:51
【问题描述】:
我将此权限放在清单文件中。
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
这是一种开始扫描方法。当屏幕在扫描时工作正常。但是当屏幕关闭时,扫描停止并在屏幕再次打开时恢复。 我试过这个solution,但仍然面临同样的问题。
void startScan() {
if (!mScanning) {
final BluetoothLeScannerCompat scanner = BluetoothLeScannerCompat.getScanner();
final ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).setReportDelay(0).setUseHardwareBatchingIfSupported(false).setUseHardwareFilteringIfSupported(false).build();
ScanFilter.Builder builder = new ScanFilter.Builder();
builder.setServiceUuid(new ParcelUuid(THINGY_BASE_UUID));
ScanFilter filter = builder.build();
final List<ScanFilter> filters = new ArrayList<>();
filters.add(filter); // Add Filter using UUID
scanner.startScan(filters, settings, scanCallback);
mScanning = true;
}
}
这是获取扫描结果的回调方法。
private ScanCallback scanCallback = new ScanCallback() {
@Override
public void onScanResult(final int callbackType, final ScanResult result) {
// do nothing
Log.e("MainActivity", "onScanResult: " + result.getDevice().getName());
}
@Override
public void onBatchScanResults(final List<ScanResult> results) {
Log.e("MainActivity", "onBatchScanResults: " + results.size());
}
@Override
public void onScanFailed(final int errorCode) {
// should never be called
}
};
【问题讨论】:
-
ScanFilter 设置看起来不错(尽管我看到您使用的是 BluetoothLeScannerCompat 而不是 BluetoothLeScanner - 我想知道这是否会有所不同?)您能否查看您的 LogCat 输出(未为您的应用程序过滤)并查看如果您在扫描开始或屏幕熄灭时看到任何有关扫描的操作系统级消息?
-
我肯定会尝试使用标准的 Android
BluetoothLeScanner类而不是第三方BluetoothLeScannerCompat。您可以从bluetoothAdapter.getBluetoothLeScanner()获得标准扫描仪 -
@davidgyoung BluetoothLeScannerCompat 是北欧扫描库。我也尝试过使用 BluetoothLeScanner,但仍然面临同样的问题。当屏幕关闭时,没有任何操作系统级别的消息。
标签: android bluetooth-lowenergy