【问题标题】:BLE Scan Stop when Mobile Screen off in android 8.1.0在 android 8.1.0 中移动屏幕关闭时 BLE 扫描停止
【发布时间】: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


【解决方案1】:

如果你使用nordic scanning library,试试这个:

 private void scan(){
    scanner = BluetoothLeScannerCompat.getScanner();
    ScanSettings settings = new ScanSettings.Builder()
            .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).setReportDelay(10)
            .setCallbackType(DEFAULT_KEYS_SEARCH_GLOBAL)
            .setUseHardwareBatchingIfSupported(false).build();
    List<ScanFilter> filters = new ArrayList<>();
    scanner.startScan(filters, settings, mScanCallback);
}

【讨论】:

    最近更新 更多