【发布时间】: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