【问题标题】:Android 8 forgets I have permission in my foreground service. BLE scanningAndroid 8 忘记了我在前台服务中的权限。 BLE扫描
【发布时间】:2018-03-23 16:57:27
【问题描述】:

我用startService(也试过startForegroundService)启动一个服务,并立即用startForeground()把它移到前台,然后在服务中我创建一个线程,我开始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() 方法,以便在调用时抛出异常。这可能是原因吗?但是,如果不在 Android 7 上,为什么在 Android 8 上onBind() 会被调用? 编辑onBind()改成返回null,无效。

minSdkVersion 和 targetSdkVersion 都是 23。

编辑 Android 8 是否要求长时间运行的前台服务服务每次都检查并请求权限,例如即使在启动应用程序时已在活动中检查并成功请求权限,但何时启动 BLE 扫描?据我所知,无法在服务中请求权限,您需要为此进行活动。

【问题讨论】:

    标签: android bluetooth-lowenergy android-permissions android-8.0-oreo foreground-service


    【解决方案1】:

    您有这个例外,因为尚未在 Android 8 设备上授予位置权限

    【讨论】:

    • 情况并非如此,因为我的活动请求此权限,即使我锁定屏幕,Ble 扫描也能正常工作。但是在 Ble 扫描停止并重新启动 15 分钟后,我得到了这个。如果应用程序在前台运行(屏幕未锁定),则运行没有问题。因此,问题似乎与屏幕锁定时服务运行 15 分钟有关。我尝试更改 Ble 扫描停止并每五分钟重新启动一次,它似乎至少工作了 10 分钟。需要在星期一继续...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多