Java 如何知道android中BLE扫描的状态?
我正在开发一个移动应用程序,在这个应用程序中,我正在执行以下操作,以从我的传感器获取数据Java 如何知道android中BLE扫描的状态?,java,android,bluetooth,bluetooth-lowenergy,foreground-service,Java,Android,Bluetooth,Bluetooth Lowenergy,Foreground Service,我正在开发一个移动应用程序,在这个应用程序中,我正在执行以下操作,以从我的传感器获取数据 在前台服务中运行BLE扫描 检测蓝牙开/关状态并自动启动和停止BLE扫描 每隔3分钟重新启动BLE扫描(我在某个地方读到,当运行超过15分钟时,BLE扫描会自动停止)。为了安全起见,我每3分钟重启一次 我使用以下语句启动/重新启动扫描 scanner.startScan(scanFilters,scanSettings,callback); scanner.stopScan(callback); 我使用
scanner.startScan(scanFilters,scanSettings,callback);
scanner.stopScan(callback);
我使用以下语句停止扫描
scanner.startScan(scanFilters,scanSettings,callback);
scanner.stopScan(callback);
在scanFilters
中,我设置了设备ID的名称,在scanSettings
中,我将扫描模式设置为LOW\u LATENCY
该应用程序在大多数情况下运行良好。但有时我会收到一些客户的投诉,即使蓝牙和位置都打开了,也没有数据更新。传感器工作正常。当我启动blueooth LE扫描时,如何确保扫描是否实际运行?。我可以在任何地方获得扫描运行状态或编号。您只需稍加修改即可
- 从下面的代码中,我们发现
是标记mScanning
- 启动和停止扫描时,我们正在更改扫描值
- 现在我们声明一个静态get方法来检查
是否为true或falsemScanning
- 根据您可以理解的值,扫描是否正在运行
既然你说这种情况只发生在一些客户身上,那么你的问题可能还有另一个根源 BLE需要许可才能为运行低于8.0的Android版本的设备工作。更高版本可以使用。您可能已将权限添加到应用程序清单文件中,如下所示:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
但更安全的做法是在运行时检查此权限,如果未授予,则请求它。有关如何在运行时向用户请求许可证的更多信息,请查看页面。您的实现与本文大致类似吗?:对这几乎是相似的。但是我在这些代码片段的任何地方都看不到BLE扫描的状态。我只想知道BLE扫描是否正在运行。该应用程序既可以访问精细位置,也可以访问粗略位置。我只是想知道启动BLE扫描后的状态。你是如何授予它们的?您手头有发生问题的设备吗?如果您查看应用程序设置,我假设这些设备实际上没有授予位置权限OK。我明白你的意思。但mScanning只是一个变量,我们正在改变状态。什么是BLE扫描?调用bluetoothLeScanner.startScan(leScanCallback)后仍无法启动?您可以声明
mScanning
static。现在你可以从任何地方访问它。检查它的状态。在检查过程中,如果你发现它是真的。表示扫描正在运行。我也会更新答案。如果你觉得这个答案有帮助,那么就投票并接受它。:)好啊如果startScan由于某种原因无法启动BLE扫描,那么正如您所说,mScanning将仅为true。检查BLE扫描是否真的在运行的方法是错误的。可以检查此链接: