高德定位sdk在HarmonyOS 鸿蒙Next中当设备拒绝精确定位只能使用模糊定位时IAMapLocationListener不执行回调问题,既没有成功回调也没有失败回调。但是开启精确定位后可以正常返回位置回调。
高德定位sdk在HarmonyOS 鸿蒙Next中当设备拒绝精确定位只能使用模糊定位时IAMapLocationListener不执行回调问题,既没有成功回调也没有失败回调。但是开启精确定位后可以正常返回位置回调。
import { AMap,
LocationSource,
MapsInitializer, MapView, MapViewComponent, MapViewManager,
MyLocationStyle,
OnLocationChangedListener} from ‘@amap/amap_lbs_map3d’;
import { UI } from "…/…/common/UI"
import { HotDto } from ‘./entity/HotDto’;
import { BusinessError } from ‘@kit.BasicServicesKit’;
import { geoLocationManager } from ‘@kit.LocationKit’;
import {
AMapLocationManagerImpl,
AMapLocationOption, AMapLocationReGeocodeLanguage,
AMapLocationType,
IAMapLocationListener } from ‘@amap/amap_lbs_location’;
import { PermissionUtil } from ‘@pura/harmony-utils’;
import { Permissions } from ‘@kit.AbilityKit’;
import { ProgressUtil, showToast } from ‘utils’;
import { MainListComponent } from ‘./MainListComponent’;
@ComponentV2
export struct MainMapComponent {
private mapView?: MapView;
private aMap?: AMap;
private locationManger?: AMapLocationManagerImpl;
private mapLocationListener?:OnLocationChangedListener
@Consumer() isInHistoryMode: boolean = false
@Consumer() datas: Array<HotDto> = []
@Consumer() datas1: Array<HotDto> = []
@Consumer() datas2: Array<HotDto> = []
@Consumer() datas3: Array<HotDto> = []
@Consumer() datas4: Array<HotDto> = []
@Local listData: Array<HotDto> = []
onDidBuild(): void {
MapViewManager.getInstance().registerMapViewCreatedCallback((mapview?: MapView, mapViewName?: string) => {
if (!mapview) {
return;
}
this.mapView = mapview;
this.mapView.onCreate();
this.mapView.getMapAsync((map) => {
this.aMap = map;
this.setMapUi();
this.setMapLocation();
})
})
}
build() {
Column() {
MapViewComponent()
.width(UI.MATCH_PARENT)
.height(UI.MATCH_PARENT)
.backgroundColor(Color.Red)
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
}
}
setMapUi(){
this.aMap?.getUiSettings()?.setScaleControlsEnabled(true)
this.aMap?.getUiSettings()?.setRotateGesturesEnabled(false)
}
setMapLocation(){
let p: Permissions[] = [‘ohos.permission.APPROXIMATELY_LOCATION’,‘ohos.permission.LOCATION’]; //相机
PermissionUtil.requestPermissionsEasy§.then((result) => {
if (!result) {
ProgressUtil.info(‘您已拒绝精确定位权限,当前无法在地图上显示您的准确位置,请您到设置页面开启定位权限。’);
this.locationManger?.stopUpdatingLocation()
this.locationManger?.startUpdatingLocation()
}else {
this.locationManger?.stopUpdatingLocation()
this.locationManger?.startUpdatingLocation()
}
})
let options: AMapLocationOption = {
priority: geoLocationManager.LocationRequestPriority.FIRST_FIX, //定位优先配置选项
scenario: geoLocationManager.LocationRequestScenario.UNSET, //定位场景设置
timeInterval: 5, //定位时间间隔
distanceInterval: 0, //位置报告距离间隔
maxAccuracy:100000,
allowsBackgroundLocationUpdates: false, //是否允许后台定位
locatingWithReGeocode: true, //定位是否返回逆地理信息
reGeocodeLanguage: AMapLocationReGeocodeLanguage.Chinese, //逆地址语言类型
isOffset: true //是否加偏
}
let listener: IAMapLocationListener = {
onLocationChanged: (location) => {
try {
this.mapLocationListener?.onLocationChanged(location);
} catch (e) {
console.info((e as BusinessError).message);
showToast(e.message);
}
}, onLocationError: (error) => {
showToast(error.errorMsg);
console.info(error.errorMsg);
}
};
this.locationManger = new AMapLocationManagerImpl(getContext());
this.locationManger?.setLocationListener(AMapLocationType.Updating, listener)
this.locationManger?.setLocationOption(AMapLocationType.Updating, options)
this.locationManger?.startUpdatingLocation()
let locationStyle: MyLocationStyle = new MyLocationStyle();
locationStyle.showMyLocation(true);
locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);
this.aMap?.setMyLocationStyle(locationStyle);
this.aMap?.setLocationSource(this);
this.aMap?.setMyLocationEnabled(true);
}
activate(listener: OnLocationChangedListener): void {
this.mapLocationListener = listener
}
deactivate(): void {
}
}
更多关于高德定位sdk在HarmonyOS 鸿蒙Next中当设备拒绝精确定位只能使用模糊定位时IAMapLocationListener不执行回调问题,既没有成功回调也没有失败回调。但是开启精确定位后可以正常返回位置回调。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
目前貌似鸿蒙系统中的高德定位SDK仅支持精确位置权限定位,而不支持模糊定位。所以如果用户在授予权限时关闭了高精度的权限,SDK将无法正常工作,也不会返回定位数据。具体来说:
当用户仅授予了模糊定位权限(ohos.permission.APPROXIMATELY_LOCATION),而没有授予精确位置权限(ohos.permission.LOCATION)时,调用定位服务如requestSingleLocation方法时,会收到错误信息errorCode: 2 ; errorMsg: Check Perminssion Failed.
即便尝试使用IAMapLocationListener进行连续定位监听,如果没有精确位置权限,SDK同样不会执行回调,无论是成功还是失败的回调都不会触发。
更多关于高德定位sdk在HarmonyOS 鸿蒙Next中当设备拒绝精确定位只能使用模糊定位时IAMapLocationListener不执行回调问题,既没有成功回调也没有失败回调。但是开启精确定位后可以正常返回位置回调。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
但是我看高德地图本身是可以的,我给他模糊定位他也能显示只是位置的确是不准确。
next里面高德地图APP怎么判断用的是模糊定位?
针对高德定位SDK在HarmonyOS鸿蒙Next中,当设备拒绝精确定位只能使用模糊定位时,AMapLocationListener不执行回调的问题,这可能是由于SDK在模糊定位模式下的回调机制存在特定要求或限制。
首先,需确认已正确配置SDK并申请相关权限,包括模糊定位所需的权限。其次,检查AMapLocationListener的实现,确保在模糊定位模式下也能正确处理回调。由于模糊定位的精度较低,SDK可能不会在每次位置变化时都触发回调,这取决于SDK的内部实现和定位策略。
此外,建议查阅高德开放平台的官方文档,了解SDK在模糊定位模式下的具体行为和回调机制。若问题仍未解决,可能是由于SDK的bug或兼容性问题,建议联系高德开放平台的技术支持。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。