HarmonyOS 鸿蒙Next 获取Location位置信息,module.json5已配置权限 调用geoLocationManager.getCurrentLocation 程序崩溃
HarmonyOS 鸿蒙Next 获取Location位置信息,module.json5已配置权限 调用geoLocationManager.getCurrentLocation 程序崩溃
代码报错 :Error message:BussinessError 3301100: The location switch is off.
Error code:3301100
SourceCode:
geoLocationManager.getCurrentLocation(requestInfo, (err, result) => {
^
Stacktrace:
at anonymous (feature/home/src/main/ets/pages/webview/config/H5CallNativeMethods.ets:89:9)
import { AppBar } from './widget/AppBar'
import geoLocationManager from '@ohos.geoLocationManager';
import promptAction from '@ohos.promptAction';
import PermissionUtil from '../common/PermissionUtil';
import { Permissions } from '@ohos.abilityAccessCtrl';
@Entry
@Component
struct GeoLocation {
@State message: string = '开始定位'
@State location: string = ''
build() {
Column() {
AppBar({
title: "地理定位"
})
Button() {
Text(this.message)
.fontSize(18)
.fontWeight(FontWeight.Bold)
.fontColor(Color.White)
}.onClick(() => {
this.startLocation()
}).margin({
top: 100
}).width("80%")
.height(50)
Text("location:" + this.location)
.fontSize(18)
.fontWeight(FontWeight.Bold)
.margin({ top: 20 })
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Start)
}
async startLocation() {
let permissions: Array<Permissions> = ['ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION']
//检测权限
let hasPermission = await PermissionUtil.checkPermission(permissions)
if (hasPermission) {
this.getLocate()
} else {
//动态申请权限
let hasGrant = await PermissionUtil.requestPermission(permissions)
if (hasGrant) {
this.getLocate()
} else {
promptAction.showToast({
message: "请开启定位权限实现定位",
duration: 2000
})
//跳转到权限引导页面 包名需要改成自己应用的
PermissionUtil.openPermissionSettings('com.example.harmonyos35')
}
}
}
//获取位置
getLocate() {
let requestInfo: geoLocationManager.LocationRequest = {
'priority': 0x203, //位置请求中位置信息优先级设置: 0x203表示快速获取位置优先 0x201表示精度优先 0x202表示低功耗优先。
'scenario': 0x300, //位置请求中定位场景设置:0x300表示未设置场景信息 0x301表示导航场景 0x302表示运动轨迹记录场景 0x303表示打车场景 0x304表示日常服务使用场景 0x305 表示无功耗功场景
'timeInterval': 0, //表示上报位置信息的时间间隔,单位是秒。取值范围为大于0。
'distanceInterval': 0, //表示上报位置信息的距离间隔。单位是米,取值范围为大于0。
'maxAccuracy': 0 //表示精度信息。仅在精确位置功能场景下有效,模糊位置功能生效场景下该字段无意义。取值范围为大于0
}
let locationChange = (location: object) => {
console.log('locationChanger: data: ' + JSON.stringify(location));
this.location = 'locationChanger: data: ' + JSON.stringify(location)
};
try {
geoLocationManager.on('locationChange', requestInfo, locationChange);
} catch (err) {
console.error("errCode:" + err.code + ",errMessage:" + err.message);
this.location = "errCode:" + err.code + ",errMessage:" + err.message
}
}
}
7 回复
如何打开位置开关呢,在模拟器上面
楼主您好,3301100错误,是位置功能的开关未开启导致功能失败。位置功能的开关未开启,导致持续定位,单次定位等基本功能不可用,建议检查用户开启位置功能的开关。
指导链接:Location Kit简介-Location Kit(位置服务)-应用服务 | 华为开发者联盟 (huawei.com)
代码如何开启这个位置功能的开关呢?
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
解决了吗?模拟器我也遇到这样的问题了
回到顶部