当前位置: 首页 > 知识库问答 >
问题:

Android 8忘记我在前台服务中拥有权限。BLE扫描

柳灿
2023-03-14

我使用start Service启动服务(也尝试过start Foreground Service)并使用start Foreground()立即将其移动到前台,然后在服务中我创建一个线程,在那里我开始BLE扫描15分钟,之后我停止BLE扫描,然后立即重新启动BLE扫描15分钟,依此类推。

当我运行应用程序时,请求并批准活动的权限。然后我用设备按钮锁定屏幕,让前台服务运行,扫描BLE并从BLE设备读取数据。

如果我在Android 7上运行它,这是没有问题的。但是当我在Android 8上运行它时,我得到了这个:

03-23 17:58:26.887 18038-18055 W/Binder: Binder call
failed.

java.lang.SecurityException: Need ACCESS_COARSE_LOCATION or
ACCESS_FINE_LOCATION permission to get scan results at 
android.os.Parcel.readException(Parcel.java:1942)

我已经实现了onBind()方法,以便在调用时抛出异常。这可能是原因吗?但如果不是在Android7上,为什么Android8上的onBind()会被调用?编辑已更改的onBind()返回null,无效。

MinSDK版本和TargetSDK版本均为23。

编辑Android 8是否要求长时间运行的前台服务服务每次都检查和请求权限,例如当BLE扫描启动时,即使在应用程序启动时已经在活动中成功检查和请求了权限?据我所知,服务中不能请求权限,您需要活动。

共有1个答案

仲孙子辰
2023-03-14

你有这个例外,因为Android 8设备上没有授予位置权限

 类似资料:
  • 我可以在Android 10上使用前台服务在后台进行工作BLE扫描。我的应用程序具有in-manifest Foreground\u服务,并在启动时从用户那里获得premissions ACCESS\u FINE\u位置和ACCESS\u background\u位置。然后用BLE扫描启动前台服务。当屏幕在服务上执行扫描和查找设备时,但当屏幕离开前台时,服务停止工作,扫描停止。 正在启动服务: 使

  • 我正在与Bluez一起使用带有USB蓝牙加密狗的TinyCore linux盒。我们使用示例gatt服务器添加电池服务以发送降低的电池电量。使用蓝牙,我们的控制器(USB蓝牙加密狗)的信息显示服务: 我们的目标是在Android应用程序上阅读此内容,但在我们的自定义应用程序和示例BLE扫描应用程序中,我们看到的唯一服务是00001800(通用访问配置文件)和00001801(通用属性配置文件)。

  • 最近,我们突然看到以下几个堆栈跟踪。为什么会这样?这是从应用程序尝试将音频评论服务移动到前台时开始的,包括媒体通知和所有内容。

  • 问题内容: 我来自一个有角的世界,在那里我可以将逻辑提取到服务/工厂,并在控制器中使用它们。 我试图了解如何在React应用程序中实现相同的目标。 假设我有一个可以验证用户密码输入(强度)的组件。它的逻辑非常复杂,因此我不想将其编写在自己的组件中。 我应该在哪里写这个逻辑?在商店中,如果我使用助焊剂?还是有更好的选择? 问题答案: 第一个答案并不反映当前的Container vs Presente

  • 后台密码忘记了怎么办? 1.如果你已经在后台配置了,邮件发送功能且邮箱是你的真实邮箱,可以到前台登录页找回密码; 2.如果你是后台管理员,你可以使用 sp_password()方法生成一下新的密码; 你只要在任何一个前台可以访问控制器里,如application/Portal/Controller/IndexController.class.php <?php namespace Portal\C

  • 我正在开发一个需要从后台启动前台服务的SDK。因为它使用后台定位和蓝牙相关的工作。如果应用程序被杀死,监控正在后台执行。这就是我使用前台服务的原因。有一个条件是从后台启动前台服务。 目前,我的SDK使用服务来处理此作业。但Android 12不支持从后台启动服务。 我正在尝试从以下异常引发的后台启动服务。 如何使用WorkManager解决此问题,我的所有处理都由Service类完成,以及如何将S