Android 8忘记了我的前台服务权限。 BLE扫描

时间:2018-03-23 16:57:28

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

我使用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 8 onBind()会在服务上调用,如果不是在Android 7上? 修改已更改onBind()以返回null,无效。

minSdkVersion和targetSdkVersion都是23。

编辑 Android 8是否要求长时间运行的前台服务服务每次检查并请求权限,例如当BLE扫描开始时,虽然已经检查了权限并且在应用程序启动时成功请求了活动?据我所知,在服务中无法请求权限,您需要有相关活动。

1 个答案:

答案 0 :(得分:0)

您有此异常,因为尚未在Android 8设备上授予位置权限