当我在室内时,华为定位套件无法获取我的位置

问题描述

我正在使用定位套件,在空旷的地方,华为定位套件可以很好地工作,但是当我进入室内时,它要么可以超晚定位,要么可以得到超低精度的定位。

我的位置请求如下:

//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);
    }
}

任何帮助表示赞赏。

解决方法

华为的定位套件通过组合来自多个来源的数据来获取用户的位置。

这意味着在某些情况下,来自GPS,基站,WiFi和蓝牙的数据会合并在一起以获取更准确的位置。

在室内时,无法从GPS获取数据,因此,需要其他来源来确定用户的位置。

如果未插入 sim卡,则也无法从基站获得网络位置。

因此,如果在室内测试位置套件时遇到问题,请确保已在测试设备中输入了SIM卡,并且网络可用。

另外,如果设置的优先级较低,则将位置请求优先级设置为最高级别。

locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

无法获取位置的另一个常见原因是未向HMS Core应用程序授予“位置”权限。

转到设置->应用程序->应用程序-> HMS Core->权限->位置,然后检查是否已选择“始终允许”选项。

您还可以使用SettingsClient来签入运行时,如果运行您的应用程序的设备已授予HMS Core应用程序此权限。

更多信息可在开发人员文档中找到:

https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/location-develop-steps-0000001050746143#EN-US_TOPIC_0000001050746143__section149231022103316