getLastLocation API 获取不到Mate 30设备位置
The getLastLocation API cannot obtain the Mate 30 device location
我正在使用华为定位服务获取设备位置,发现定位结果不稳定。
我有两个测试设备:Mate 30 和 P30 Lite。我在Mate 30上使用getLastLocation()方法获取设备位置时,定位结果为空。但是该方法在P30 Lite上可以正确获取设备位置。两台测试设备的HMS Core(APK)均已更新至4.0.3.316版本。两个测试设备获取设备位置的代码也是一样的,如下所述:
private void getLastLocation() {
try {
Task<Location> lastLocation = mFusedLocationProviderClient.getLastLocation();
lastLocation.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location == null) {
LocationLog.i(TAG, "getLastLocation onSuccess location is null");
return;
}
LocationLog.i(TAG,
"getLastLocation onSuccess location[Longitude,Latitude]:" + location.getLongitude() + ","
+ location.getLatitude());
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
LocationLog.e(TAG, "getLastLocation onFailure:" + e.getMessage());
}
});
} catch (Exception e) {
LocationLog.e(TAG, "getLastLocation exception:" + e.getMessage());
}
}
为什么会这样?
getLastLocationAPI获取HMS Core缓存中的最后一个位置。如果HMS Core的缓存中没有位置,则返回null。因此,可能的原因是Mate 30设备从未使用过定位功能或HMS Core的缓存被清空。
建议不要将getLastLocationAPI获取的位置作为最新位置,因为API无法获取最新位置。建议使用 requestLocationUpdate 获取更精确的位置。有关详细信息,请访问
https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/location-guidev4#h2-1586931075472。
使用requestLocationUpdate时,您可以根据需要设置回调周期和次数。此外,您可以使用 getLastLocation 作为获取设备位置的替代方法。
我正在使用华为定位服务获取设备位置,发现定位结果不稳定。
我有两个测试设备:Mate 30 和 P30 Lite。我在Mate 30上使用getLastLocation()方法获取设备位置时,定位结果为空。但是该方法在P30 Lite上可以正确获取设备位置。两台测试设备的HMS Core(APK)均已更新至4.0.3.316版本。两个测试设备获取设备位置的代码也是一样的,如下所述:
private void getLastLocation() {
try {
Task<Location> lastLocation = mFusedLocationProviderClient.getLastLocation();
lastLocation.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location == null) {
LocationLog.i(TAG, "getLastLocation onSuccess location is null");
return;
}
LocationLog.i(TAG,
"getLastLocation onSuccess location[Longitude,Latitude]:" + location.getLongitude() + ","
+ location.getLatitude());
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
LocationLog.e(TAG, "getLastLocation onFailure:" + e.getMessage());
}
});
} catch (Exception e) {
LocationLog.e(TAG, "getLastLocation exception:" + e.getMessage());
}
}
为什么会这样?
getLastLocationAPI获取HMS Core缓存中的最后一个位置。如果HMS Core的缓存中没有位置,则返回null。因此,可能的原因是Mate 30设备从未使用过定位功能或HMS Core的缓存被清空。
建议不要将getLastLocationAPI获取的位置作为最新位置,因为API无法获取最新位置。建议使用 requestLocationUpdate 获取更精确的位置。有关详细信息,请访问 https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/location-guidev4#h2-1586931075472。
使用requestLocationUpdate时,您可以根据需要设置回调周期和次数。此外,您可以使用 getLastLocation 作为获取设备位置的替代方法。