android - 华为定位包在室内无法获取到我的位置
问题描述
我正在使用定位套件,华为定位套件在我在空旷区域时效果很好,但是当我进入室内时,它要么获得定位超晚,要么获得超低精度的定位。
我的位置请求如下所示:
//create a fusedLocationProviderClient
fusedLocationProviderClient =
LocationServices.getFusedLocationProviderClient(this);
//create a settingsClient
settingsClient = LocationServices.getSettingsClient(this);
mLocationRequest = new LocationRequest();
// set the interval for location updates, in milliseconds.
mLocationRequest.setInterval(10000);
我的回调是:
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult != null) {
List<Location> locations = locationResult.getLocations();
if (!locations.isEmpty()) {
for (Location location : locations) {
Log.i(TAG,"onLocationResult location[Longitude,Latitude,Accuracy]:" + location.getLongitude() + "," + location.getLatitude() + "," + location.getAccuracy());
}
}
}
}
@Override
public void onLocationAvailability(LocationAvailability locationAvailability) {
if (locationAvailability != null) {
boolean flag = locationAvailability.isLocationAvailable();
Log.i(TAG, "onLocationAvailability isLocationAvailable:" + flag);
}
}
任何帮助表示赞赏。
解决方案
华为Location Kit通过结合多源数据来获取用户的位置。
这意味着在某些场景中,来自 GPS、基站、WiFi 和蓝牙的数据被结合起来以获得更准确的位置。
在室内时,无法获得来自 GPS 的数据,因此需要其他来源来确定用户的位置。
如果没有插入SIM 卡,也无法从基站获取网络位置。
因此,如果您在室内测试定位套件时遇到问题,请确保您已将 SIM 卡插入测试设备并且网络可用。
此外,如果您的优先级设置较低,请将您的位置请求优先级设置为最高级别。
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
获取位置失败的另一个常见原因是 HMS Core 应用没有被授予 Location 权限。
进入设置--> 应用--> 应用--> HMS Core--> 权限--> 位置,查看是否勾选了“始终允许”选项。
如果运行您的应用程序的设备已将该权限授予 HMS Core 应用程序,您还可以使用 SettingsClient 来检查运行时。
更多信息可以在开发者文档中找到:
推荐阅读
- php - Docker PHP/Nginx 环境无法处理带有反斜杠的文件夹路径
- javascript - React Js 特殊字符替换
- java - JFrame 窗口坐标错误
- angular - 仅在 VS2017 发布时出现角度错误
- jquery - 使用 JQuery 在 Bootstrap 中显示分页
- module - Verilog中使用generate的环形振荡器
- excel - 根据单元格颜色索引从一张表复制范围将部分范围粘贴到另一张表中
- google-sheets - 当单元格值在范围内时突出显示行
- javascript - “脚本错误。” 在 CS 购物车中
- jenkins - 如果现有构建因超时而失败,则触发另一个作业