HarmonyOS 鸿蒙Next 获取Location位置信息,module.json5已配置权限 调用geoLocationManager.getCurrentLocation 程序崩溃

发布于 1周前 作者 phonegap100 最后一次编辑是 5天前 来自 鸿蒙OS

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)

111.png

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

解决了吗?模拟器我也遇到这样的问题了

@wuwangju 要真机调试,模拟器部分功能不支持的

回到顶部