我使用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扫描开始时,虽然已经检查了权限并且在应用程序启动时成功请求了活动?据我所知,在服务中无法请求权限,您需要有相关活动。
答案 0 :(得分:0)
您有此异常,因为尚未在Android 8设备上授予位置权限