系统提供的定位权限如下,需要动态申请:
ohos.permission.LOCATION
ohos.permission.LOCATION_IN_BACKGROUND
获取到权限后,以获取一次天气定位为例,先获取经纬度,再获取城市信息:
Locator locator = new Locator(context);
RequestParam requestParam = new RequestParam(RequestParam.SCENE_DAILY_LIFE_SERVICE); // 生活服务场景类定位
LocatorCallback callback = new LocatorCallback() {
@Override
public void onLocationReport(Location location) {
// location定位数据
}
@Override
public void onStatusChanged(int i) {}
@Override
public void onErrorReport(int i) {}
};
locator.requestOnce(requestParam, callback); // 取一次定位。持续定位用startLocating,配合stopLocating使用。
如果没有onLocationReport回调,基本上是权限的问题。
至此,我们获取到了经纬度,那么如何获取城市数据,需要用到(逆)地理编码转化。
GeoConvert geoConvert = new GeoConvert();
try {
List<GeoAddress> addressList = geoConvert.getAddressFromLocation(location.getLatitude(), location.getLongitude(), 1);
String locality = addressList.get(0).getLocality(); // 获取到城市信息
} catch (IOException e) {
e.printStackTrace();
}