android - android 8.1.0 手机屏幕关闭时 BLE 扫描停止

标签 android bluetooth-lowenergy

我将此权限放在 list 文件中。

<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
        }

    };

最佳答案

如果您使用的是北欧扫描库,试试这个:

 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);
}

关于android - android 8.1.0 手机屏幕关闭时 BLE 扫描停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48114602/

相关文章:

android - 将数据写入 Android 中的蓝牙 LE 特性

ios - 在 iOS 中,如何从数据创建音频文件(.wav、.mp3)文件?

android - 通过 https 发送和接收 json 消息

android - Kotlin 协程不下载数据

android - AlertDialog 不显示三星 Galaxy s4 中的正负按钮

c - 如何通过BLE双模式广播图像

bluetooth-lowenergy - 当应用程序被系统杀死时不会调用 WillRestoreState

iphone - 核心蓝牙和后台 : Detection of a device and triggering an action, 即使在后台模式下几天后?

android - 多个APK支持

java - 无法将上下文从 onpostexecute 传递到共享首选项