Here Advanced Positioning高级定位功能在Android 11系统上无法正常运行
HERE Android SDK 3.17 版本 Android 11 室内定位启动失败解决方案
- 权限适配
Android 11 新增位置权限分级规则,需完成以下配置:- 在 AndroidManifest.xml 中新增
ACCESS_BACKGROUND_LOCATION权限声明 - 运行时动态申请权限时,必须引导用户授予「始终允许」位置权限,仅授予「使用时允许」无法启动
LocationDataSourceHERE对应的后台定位服务 - 确认已提前获取
ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION权限 - 若应用 targetSdkVersion >= 31,还需补充声明
android.permission.FOREGROUND_SERVICE_LOCATION权限
- 在 AndroidManifest.xml 中新增
- 包可见性适配
Android 11 引入应用包可见性限制,默认无法访问独立进程的组件,需在 AndroidManifest.xml 中新增 queries 配置:
<queries> <service android:name="com.here.services.internal.LocationService" /> </queries>
- 服务配置调整
现有 LocationService 配置需补充前台服务类型声明,适配 Android 11 对前台服务的管控要求,修改后配置如下:
<service android:name="com.here.services.internal.LocationService" android:enabled="true" android:exported="false" android:process=":remote" android:foregroundServiceType="location"> </service>
- 调用逻辑调整
确保在 HERE SDK 完全初始化完成后再调用定位相关逻辑,同时可以调整启动顺序,先启动数据源再绑定到 PositioningManager,调整后代码示例:
mPositioningManager?.run { if (!isActive) { val locationDataSource = LocationDataSourceHERE.getInstance() // 先启动HERE数据源再绑定 locationDataSource.start() this.dataSource = locationDataSource retorno = this.start(PositioningManager.LocationMethod.GPS_NETWORK_INDOOR) } if (!isListenerAdded && retorno) { this.addListener(WeakReference(this@AppPositioningManager)) isListenerAdded = true } }
内容的提问来源于stack exchange,提问作者Matheus Abreu
相关产品推荐
相关产品推荐

