Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何知道android中BLE扫描的状态?_Java_Android_Bluetooth_Bluetooth Lowenergy_Foreground Service - Fatal编程技术网

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); 我使用

我正在开发一个移动应用程序,在这个应用程序中,我正在执行以下操作,以从我的传感器获取数据

  • 在前台服务中运行BLE扫描
  • 检测蓝牙开/关状态并自动启动和停止BLE扫描
  • 每隔3分钟重新启动BLE扫描(我在某个地方读到,当运行超过15分钟时,BLE扫描会自动停止)。为了安全起见,我每3分钟重启一次
  • 我使用以下语句启动/重新启动扫描

    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方法来检查
      mScanning
      是否为true或false
    • 根据您可以理解的值,扫描是否正在运行

    既然你说这种情况只发生在一些客户身上,那么你的问题可能还有另一个根源

    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扫描是否真的在运行的方法是错误的。可以检查此链接: