java - BLE 扫描不能在后台使用 android pie 中的 Scanfilters 工作?

标签 java android bluetooth-lowenergy android-9.0-pie

我正在使用带有扫描过滤器的 blescan 来检测信标,它在前台和后台工作非常好,直到 oreo 版本,但是当涉及到 android pie 时,它​​无法在后台发送待处理的广播。

  ScanSettings settings = (new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_POWER)).build();
            final List<ScanFilter> scanFilters = new ArrayList<>();
            scanFilters.add(getScanFilter());

            BluetoothAdapter bluetoothAdapter;
            final BluetoothManager bluetoothManager =   
                    (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
            bluetoothAdapter = bluetoothManager.getAdapter();
            Intent intent = new Intent(this.getApplicationContext(), MyBroadcastReceiver.class);
            intent.putExtra("o-scan", true);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            bluetoothAdapter.getBluetoothLeScanner().startScan(scanFilters, settings, pendingIntent);




public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        int bleCallbackType = intent.getIntExtra(BluetoothLeScanner.EXTRA_CALLBACK_TYPE, -1);
        if (bleCallbackType != -1) {
            Log.d(TAG, "Passive background scan callback type: "+bleCallbackType);
            ArrayList<ScanResult> scanResults = intent.getParcelableArrayListExtra(
                    BluetoothLeScanner.EXTRA_LIST_SCAN_RESULT);
            // Do something with your ScanResult list here.
            // These contain the data of your matching BLE advertising packets
        }
    }
}


最佳答案

Android 9 引入了多项行为变更,例如限制后台应用对设备传感器和 Wi-Fi 扫描的访问。

无论目标 SDK 版本如何,这些更改都会影响在 Android 9 上运行的所有应用。

使用连续报告模式的传感器,例如加速度计和陀螺仪,不接收事件。


Android 9 在后台对传感器的访问受限:

Android 9 限制了后台应用访问用户输入和传感器数据的能力。如果您的应用在运行 Android 9 的设备上后台运行,系统会对您的应用应用以下限制:

使用连续报告模式的传感器,例如加速度计和陀螺仪,不接收事件。

使用on-changeone-shot 报告模式的传感器不接收事件


解决方案: 如果您的应用需要在后台运行 Android 9 的设备上检测传感器事件,请使用前台服务。

关于java - BLE 扫描不能在后台使用 android pie 中的 Scanfilters 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55757830/

相关文章:

java - 通用图像加载器支持 Honeycomb 之前的 Android 版本吗?

java - 在java中使一个单词在一行中居中

android - IONIC 电容器 BLE 插件扫描不起作用

android - 是否可以在 Android 上使用 BL 3.0 实现类似 BLE 的邻近服务?

java - Android 蓝牙设备 UUID

java - 如何在 Tomcat 9.0.0M10 中修复 "JARs that were scanned but no TLDs were found in them "

java - 从另一个项目访问 PDF 文件

android - Phonegap 是否支持原生 Android 菜单?

java - 如何在谷歌地图上添加和检索地点

android - 创建基于百分比的布局