关于华为鸿蒙系统定位,provider是fused调用getLastKnownLocation返回值为null的问题
测试设备:荣耀V30PRO 鸿蒙3.0.0.208
问题描述
获取最佳的Provider
criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE); // 设置精确度
criteria.setAltitudeRequired(true); // 设置请求海拔
criteria.setBearingRequired(true); // 设置请求方位
criteria.setCostAllowed(true); // 设置允许运营商收费
criteria.setPowerRequirement(Criteria.POWER_HIGH);
if (isUsingMockGPS) {
provider = GPS_MOCK_PROVIDER;
} else {
provider = lm.getBestProvider(criteria, true);
}
然后requestLocationUpdates使用该provider
lm.requestLocationUpdates(provider, 1000, 1, mylocationListener);
/**
*循环获取GPS、NETWORK、PASSIVE定位方式
* */
private String currentBestProvider = "";
private Location getLastKnownLocation() {
//mLocationManager = (LocationManager)context.getSystemService(LOCATION_SERVICE);
List<String> providers = lm.getProviders(true);
Location bestLocation = null;
for (String provider : providers) {
@SuppressLint("MissingPermission")
Location location = lm.getLastKnownLocation(provider);
if (location == null) {
continue;
}
if (bestLocation == null || location.getAccuracy() < bestLocation.getAccuracy()) {
bestLocation = location;
currentBestProvider = provider;
}
}
return bestLocation;
}
日志打印结果:
requestLocationUpdates的provider是fused
调用getLastKnownLocation返回的值是null
解决方案:
把requestLocationUpdates传入的provider改为gps
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, mylocationListener);