问题描述
在 Android API 29 上,我意识到在运行前台服务时无法进行蓝牙扫描。我知道,如果我将 SDK 降级到版本 28,或者如果我使用较低版本的 Android(如 Android 8)来测试我的应用程序,则用于扫描附近蓝牙设备的代码可以正常工作。但是,即使我在前台服务中运行这些扫描,Android 10 上的蓝牙扫描也无法在我的应用程序最小化时工作。在这里发布所有涉及的代码是很困难的,但是为了提供一些关于我正在做的事情的上下文,这里是我如何通过运行以下函数开始我的蓝牙扫描的一般想法:
private BluetoothAdapter mBluetooth;
public void startDiscovery() {
Context context = ContextHandler.getInstance().getServiceContext();
mBluetooth = BluetoothAdapter.getDefaultAdapter();
IntentFilter iFilter = new IntentFilter();
iFilter.addAction(BluetoothDevice.ACTION_FOUND);
context.registerReceiver(discoveryResult,iFilter);
mBluetooth.startDiscovery();
}
我设法发现 mBluetooth.startDiscovery()
在前台工作不正常,因为它返回一个布尔值,所以我可以创建一个打印这个布尔值的 Toast
函数,我确定在 Android 10 上它会在我的应用最小化后打印 false
而在 Android 8 上它会在我的应用最小化时打印 true
。运行 startDiscovery()
方法的目的是扫描附近的设备,以便获取设备的 BluetoothDevice
对象。
因此,我正在尝试解决 startDiscovery()
方法未在前台运行的问题。我知道当我在内存中有 BluetoothDevice
对象时,我不需要进行新的蓝牙扫描(我可以连接到我以前使用这个对象连接的设备)。但这里的问题是我需要至少进行一次新的蓝牙扫描才能将此对象保存在内存中。有没有办法将这个对象保存在一个文件中,这样我就不用依赖新的蓝牙扫描了?所以我可以在我的应用程序处于后台时自由连接到我已经扫描的设备?
或者在使用带有 SDK29 的 Android 10 时在前台运行蓝牙扫描时我可能遗漏了什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)