HarmonyOS 鸿蒙Next 离线定位怎么做需要哪个选取

发布于 1周前 作者 nodeper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 离线定位怎么做需要哪个选取

在无网络的情况下,鸿蒙获取定位信息,请指教

7 回复
import { abilityAccessCtrl, common, Permissions } from '@kit.AbilityKit';
import { Logger } from '../log/Logger';
import { geoLocationManager } from '@kit.LocationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { intl } from '@kit.LocalizationKit';

const REQUEST_PERMISSIONS: Array<Permissions> = [
  'ohos.permission.APPROXIMATELY_LOCATION',
  'ohos.permission.LOCATION'
]

@Entry
@Component
struct Index {
  private context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
  @State message: string = '当前位置:';
  @State locale: string = new intl.Locale().language;

  getCurrentLocation() {
    let atManager = abilityAccessCtrl.createAtManager();
    try {
      atManager.requestPermissionsFromUser(this.context, REQUEST_PERMISSIONS).then((data) => {
        if (data.authResults[0] !== 0 || data.authResults[1] !== 0) {
          return;
        }

        let locationChange = (err: BusinessError, location: geoLocationManager.Location) => {
          // 获取经纬度
          if (location.latitude === 0 && location.longitude === 0) {
            return;
          }

          // 将经纬度转成实际位置
          let reverseGeocodeRequest: geoLocationManager.ReverseGeoCodeRequest = {
            'locale': this.locale.toString().includes('zh') ? 'zh' : 'en',
            'latitude': location.latitude,
            'longitude': location.longitude,
            'maxItems': 1
          };
          // this.message = this.message + location.latitude + location.longitude;
          geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest).then(data => {
            if (data[0].placeName) {
              this.message = this.message + data[0].placeName;
            }
          }).catch((err: Error) => {
            Logger.error('GetAddressesFromLocation err ' + JSON.stringify(err));
          });
        };

        geoLocationManager.getCurrentLocation(
          {
            priority: geoLocationManager.LocationRequestPriority.FIRST_FIX,
            scenario: geoLocationManager.LocationRequestScenario.UNSET
          }, locationChange);
      }).catch((err: Error) => {
        Logger.error(`req permissions failed, error.code:${err.name}, error message: ${err.message}.`)
      })
    } catch (err) {
      Logger.error(`req permissions failed, error.code:${err.code}, error message: ${err.message}.`)
    }
  }

  build() {
    Row() {
      Column() {
        Button("获取当前位置")
          .fontSize(20)
          .onClick(() => {
            this.getCurrentLocation()
          })

        Text(this.message)
          .fontSize(30)
          .fontWeight(FontWeight.Bold)

      }
      .width('100%')
    }
    .height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next 离线定位怎么做需要哪个选取的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


多谢,但无法转换成位置信息意义就不大了。希望官方能解决这个问题。或者在文档中给与说明,避免大家误解

但没有网络的情况下获取不到位置信息啊

试过,可以获取到经纬度信息,转换位置信息获取不到

不联网还是拿不到定位,我尝试了你的方式,先联网,可以拿到经纬度,然后断网后过段时间就不行了

在没有网络,有GPS信号的情况下是可以发起定位请求能获取到位置信息的

当priority设置为First_Fix(快速定位),会优先从最快返回地理位置的途径获取位置信息。在室内没有GPS信号的情况下,网络为优先选项。

如果没有网络,可能会出现获取不到的情况。

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-geolocationmanager-V13#currentlocationrequest

HarmonyOS 鸿蒙Next 离线定位功能主要通过集成特定的硬件模块(如超宽带UWB芯片)和软件算法来实现。该功能无需网络连接,即可通过设备间的直接通信进行位置确定。

为实现离线定位,你需要选取以下关键组件和技术:

  1. 硬件支持:确保你的设备内置或可外接支持离线定位的硬件模块,如UWB芯片。这些芯片能够提供高精度的距离测量能力,是实现离线定位的基础。

  2. 软件算法:利用鸿蒙系统提供的离线定位API,结合设备间的直接通信数据,运行特定的定位算法(如三角定位、多边测量等),以计算目标设备的位置。

  3. 系统配置:在鸿蒙Next系统中,配置相应的权限和服务,确保离线定位功能能够正常启动和运行。同时,根据应用场景,可能需要优化设备的功耗和性能表现。

  4. 应用集成:在你的应用程序中集成鸿蒙的离线定位功能,通过调用相关API,实现设备间的位置确定和展示。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部