一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS實(shí)戰(zhàn):高德地圖定位功能完整流程詳解

尤楓 ? 來源:jf_54996641 ? 作者:jf_54996641 ? 2025-06-09 15:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

地圖定位功能相信很多人都用過,在鴻蒙的應(yīng)用程序開發(fā)中,使用高德地圖的定位功能變得十分常見,那么在鴻蒙中一次完整的地位功能怎么實(shí)現(xiàn)?如果定位失敗了,能否獲取前幾次的定位呢?本篇文章帶你實(shí)現(xiàn)一個(gè)完整的定位功能流程,建議點(diǎn)贊收藏!

需求分析

要想實(shí)現(xiàn)一個(gè)完整的定位需求流程,就必須要做好準(zhǔn)備工作,了解實(shí)現(xiàn)需求的具體步驟。

  • 權(quán)限申請(qǐng)
  • 檢查 GPS 是否打開
  • 單次定位還是多次定位
  • 定位失敗處理

技術(shù)實(shí)現(xiàn)

要想實(shí)現(xiàn)一次完整的定位流程,必須根據(jù)需要分析一步步去實(shí)現(xiàn),由于高德地圖的引入太過于簡(jiǎn)單,這里一筆帶過。重點(diǎn)講解完整實(shí)現(xiàn)的步驟。

  1. 添加基本定位權(quán)限,在 entry 模塊下的 module.json5 中添加定位必要的兩個(gè)權(quán)限。
{
        // user_grant
        "name": "ohos.permission.APPROXIMATELY_LOCATION",
        "reason": "$string:location_permissions_reason",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "always"
        }
      },
      {
        // user_grant
        "name": "ohos.permission.LOCATION",
        "reason": "$string:location_permissions_reason",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "always"
        }
      },
  1. 在頁(yè)面中進(jìn)行權(quán)限申請(qǐng),一般是在 onPageShow 生命周期方法中申請(qǐng),先檢查系統(tǒng) GPS 定位開關(guān)是否開啟,如果沒有開啟則提示用戶跳轉(zhuǎn)到系統(tǒng)指定位置打開。
let location =  geoLocationManager.isLocationEnabled()
 if (!location) {
        let dialog = new OpenSystemGPSEHelper()
        dialog.show(this.getUIContext(),getContext(this) as common.UIAbilityContext,()= >{
          this.currentCity = "定位失敗"
        })
      }

//GPS跳轉(zhuǎn)頁(yè)面
context.startAbility(
          {
            bundleName: "com.huawei.hmos.settings",

            abilityName: "com.huawei.hmos.settings.MainAbility",

            uri: "location_manager_settings"

          },
  1. 確認(rèn) GPS 打開之后,開始 申請(qǐng) 用戶權(quán)限。
static applyPermission(context: common.UIAbilityContext, permissions: Array< Permissions >, grantedBlock: () = > void,
    deniedBlock?: () = > void) {
    let atManager = abilityAccessCtrl.createAtManager()
    let permissionGrantedNumber: number = 0 
    atManager.requestPermissionsFromUser(context, permissions).then((data) = > {
      for (let index = 0; index < data.authResults.length; index++) {
        if (data.authResults[index] == 0) { 
          permissionGrantedNumber++;
        }
      }
      if (permissionGrantedNumber == permissions.length) {
        grantedBlock()
      } else {
        if (deniedBlock) {
          deniedBlock()
        } else {
          PermissionUtil.openPermissionsInSystemSettings(context)
        }
      }
    })
  }
  1. 如果用戶打開權(quán)限,則直接開始定位服務(wù),否則提示用戶跳轉(zhuǎn)到系統(tǒng)指定位置打開權(quán)限。
let wantInfo: Want = {
      bundleName: 'com.huawei.hmos.settings',
      abilityName: 'com.huawei.hmos.settings.MainAbility',
      uri: 'application_info_entry',
      parameters: {
        settingsParamBundleName: bundleInfo.name
      }
    }
    context.startAbility(wantInfo).then(() = > {
    })
  1. 確認(rèn)定位權(quán)限沒問題后,開始定位,高德提供的定位有多次和單次,這里使用單次定位。
let listener: IAMapLocationListener = {
      onLocationChanged: (location) = > {
        console.log("當(dāng)前定位1:"+location.latitude+",---longitude:"+location.longitude)
        this.transformCity(location.latitude,location.longitude)
      }, onLocationError: (error) = > {
      }
    };
    LocationManager.getInstance().addListener(listener)
    LocationManager.getInstance().initLocation()
     // 定位參數(shù)配置
    let options: AMapLocationOption = {
      //定位優(yōu)先配置選項(xiàng)
      priority: geoLocationManager.LocationRequestPriority.FIRST_FIX,
      //定位場(chǎng)景設(shè)置
      scenario: geoLocationManager.LocationRequestScenario.UNSET,
      //定位精度 單位:米
      maxAccuracy: 0,
      //指定單次定位超時(shí)時(shí)間
      singleLocationTimeout: 3000,
      //定位是否返回逆地理信息
      locatingWithReGeocode: true,
      //逆地址語(yǔ)言類型
      reGeocodeLanguage: AMapLocationReGeocodeLanguage.Chinese,
      isOffset: false //是否加偏
    }
    // 設(shè)置配置
    this.locationManger?.setLocationOption(AMapLocationType.Single, options)
    if (this.listener != undefined) {
      // 監(jiān)聽
      this.locationManger?.setLocationListener(AMapLocationType.Single, this.listener)
    }
    // 啟動(dòng)定位
    this.locationManger?.requestSingleLocation()
  1. 定位成功拿到定位的信息,在實(shí)際開發(fā)中盡管設(shè)置中已經(jīng)設(shè)置返回逆地理信息,但并沒有返回具體信息,這點(diǎn)實(shí)在是無法理解,只能得到當(dāng)前位置的經(jīng)緯度。這個(gè)時(shí)候需要將經(jīng)緯度轉(zhuǎn)換為當(dāng)前位置名稱。
  2. 在開發(fā)中通過使用華為官方系統(tǒng)中的 api,對(duì)經(jīng)緯度進(jìn)行逆編碼才能獲取準(zhǔn)備的位置名稱。
let reverseGeocodeRequest:geoLocationManager.ReverseGeoCodeRequest = {"latitude":latitude, "longitude":longitude, "maxItems": 1};
    try {
      geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest, (err, data) = > {})
  1. 如果地圖定位失敗,則可以根據(jù)高德地圖提供的方法,嘗試拿取歷史定位信息。
LocationManager.getInstance().getLastLocation({
      onLocationChanged: (location) = > {
        console.info('地圖定位緩存獲取成功:  ' + JSON.stringify(location))
        

        if (success) {
          success()
        }
      }, onLocationError: (e) = > {
        console.info('地圖定位緩存獲取失敗:  ' + JSON.stringify(e))
      
        if (success) {
          success()
        }
      }
    })
  1. 如果歷史定位信息也獲取失敗,這時(shí)就能使用默認(rèn)定位位置了。

總結(jié)

定位功能實(shí)現(xiàn)起來比較簡(jiǎn)單,但是完整的定位流程及細(xì)節(jié)處理才是本篇文章的關(guān)鍵,相信看完本篇文章你已經(jīng)學(xué)會(huì)在鴻蒙中怎么使用高德定位功能了,快去動(dòng)手嘗試一下吧!

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 定位
    +關(guān)注

    關(guān)注

    5

    文章

    1443

    瀏覽量

    35971
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2126

    瀏覽量

    33043
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    HarmonyOS 5】鴻蒙星閃NearLink詳解

    HarmonyOS 5】鴻蒙星閃NearLink詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 鴻蒙星閃NearLink Kit
    的頭像 發(fā)表于 07-11 18:24 ?305次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】鴻蒙星閃NearLink<b class='flag-5'>詳解</b>

    示波器MSOX3104A自動(dòng)測(cè)量功能詳解實(shí)戰(zhàn)技巧

    一、引言 在電子工程、通信調(diào)試、自動(dòng)化控制等領(lǐng)域,示波器是工程師不可或缺的測(cè)試工具。是科技(Keysight)的MSOX3104A示波器憑借其高精度、多功能特性,尤其在自動(dòng)測(cè)量功能上實(shí)現(xiàn)了智能化
    的頭像 發(fā)表于 07-03 13:52 ?94次閱讀
    是<b class='flag-5'>德</b>示波器MSOX3104A自動(dòng)測(cè)量<b class='flag-5'>功能</b><b class='flag-5'>詳解</b>與<b class='flag-5'>實(shí)戰(zhàn)</b>技巧

    地圖攜手華為推出長(zhǎng)隧道車道級(jí)導(dǎo)航

    地圖攜手華為Pura80系列,支持超長(zhǎng)隧道全程車道級(jí)導(dǎo)航,為行車安全與效率帶來全新升級(jí)。
    的頭像 發(fā)表于 07-02 16:44 ?386次閱讀

    鴻蒙地圖功能開發(fā)【3. 代碼開發(fā)】##地圖開發(fā)##

    在開發(fā)地圖相關(guān)功能的時(shí)候也是這個(gè)想法。我最近做的項(xiàng)目是類似于校園配送的app,下單的用戶需要去查看配送員的實(shí)時(shí)位置。配送員的app負(fù)責(zé)定位,用戶的app上查看地圖,測(cè)試的時(shí)候發(fā)現(xiàn),不管
    發(fā)表于 06-29 22:59

    鴻蒙地圖功能開發(fā)【1. 開發(fā)準(zhǔn)備】##地圖開發(fā)##

    ? 對(duì)于地圖功能的開發(fā),有以下三種思路 使用鴻蒙官方的Map Kit進(jìn)行開發(fā) 使用第三方地圖的SDK(例如地圖、百度
    發(fā)表于 06-29 22:52

    HarmonyOS 5】桌面快捷方式功能實(shí)現(xiàn)詳解

    HarmonyOS 5】桌面快捷方式功能實(shí)現(xiàn)詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 在移動(dòng)應(yīng)用開發(fā)中,如何讓用戶快速
    的頭像 發(fā)表于 06-21 16:42 ?291次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】桌面快捷方式<b class='flag-5'>功能</b>實(shí)現(xiàn)<b class='flag-5'>詳解</b>

    HarmonyOS 5】鴻蒙中的UIAbility詳解(三)

    HarmonyOS 5】鴻蒙中的UIAbility詳解(三) ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 本文是鴻蒙中的UIAbility
    的頭像 發(fā)表于 06-14 22:32 ?45次閱讀

    發(fā)布智能眼鏡行業(yè)解決方案

    近日,地圖旗下開放平臺(tái)正式發(fā)布智能眼鏡解決方案,標(biāo)志著其在空間計(jì)算與智能穿戴領(lǐng)域的技術(shù)創(chuàng)新邁入新階段。
    的頭像 發(fā)表于 06-09 15:10 ?434次閱讀

    HarmonyOS實(shí)戰(zhàn)地圖自定義定位圖標(biāo)展示

    前言 地圖定位功能基本上已經(jīng)成了日常應(yīng)用程序的必備功能之一,在日常開發(fā)地圖定位
    的頭像 發(fā)表于 06-09 14:59 ?231次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>實(shí)戰(zhàn)</b>:<b class='flag-5'>高</b><b class='flag-5'>德</b><b class='flag-5'>地圖</b>自定義<b class='flag-5'>定位</b>圖標(biāo)展示

    谷歌地圖GPS定位

    谷歌地圖GPS定位:精準(zhǔn)導(dǎo)航背后的技術(shù)解析 谷歌地圖作為全球最受歡迎的地圖服務(wù)之一,其精準(zhǔn)的GPS定位
    的頭像 發(fā)表于 05-29 16:54 ?312次閱讀

    地圖與Rokid達(dá)成合作

    近日,地圖與Rokid宣布達(dá)成合作,將共同推出基于全場(chǎng)景智能眼鏡Rokid Glasses的全球首個(gè)導(dǎo)航智能體(NaviAgent)應(yīng)用,標(biāo)志著
    的頭像 發(fā)表于 05-20 16:00 ?305次閱讀

    高質(zhì)量 HarmonyOS 權(quán)限管控流程

    高質(zhì)量 HarmonyOS 權(quán)限管控流程HarmonyOS 應(yīng)用開發(fā)過程中,往往會(huì)涉及到 敏感數(shù)據(jù) 和 硬件資源 的調(diào)動(dòng)和訪問,而這部分的調(diào)用就會(huì)涉及到管控這部分的知識(shí)和內(nèi)容了。我們需要對(duì)它有
    的頭像 發(fā)表于 04-02 18:29 ?931次閱讀
    高質(zhì)量 <b class='flag-5'>HarmonyOS</b> 權(quán)限管控<b class='flag-5'>流程</b>

    地圖與長(zhǎng)城汽車共建出行聯(lián)合創(chuàng)新LAB

    近日,地圖與長(zhǎng)城汽車在河北舉行出行聯(lián)合創(chuàng)新LAB揭牌儀式,雙方將圍繞導(dǎo)航出行領(lǐng)域展開深度合作,共創(chuàng)未來用戶智慧出行新體驗(yàn)。與此同時(shí),基于
    的頭像 發(fā)表于 01-07 10:03 ?490次閱讀

    長(zhǎng)城汽車聯(lián)手地圖打造出行聯(lián)合創(chuàng)新LAB

    近日,長(zhǎng)城汽車與地圖基于長(zhǎng)期良好的合作基礎(chǔ),聯(lián)手打造的“出行聯(lián)合創(chuàng)新LAB”正式在保定市長(zhǎng)城汽車技術(shù)中心揭牌。根據(jù)共同約定,雙方將通過出行聯(lián)合創(chuàng)新LAB,發(fā)揮各自優(yōu)勢(shì),共同研究、探索基于用戶出行
    的頭像 發(fā)表于 01-07 09:51 ?578次閱讀

    淺談芯片制造的完整流程

    在科技日新月異的今天,芯片作為信息技術(shù)的核心部件,其制作工藝的復(fù)雜性和精密性令人嘆為觀止。從一粒普通的沙子到一顆蘊(yùn)含無數(shù)晶體管的高科技芯片,這一過程不僅凝聚了人類智慧的結(jié)晶,也展現(xiàn)了現(xiàn)代半導(dǎo)體工業(yè)的極致工藝。本文將講述芯片制造的完整流程,揭開這一高科技產(chǎn)品的神秘面紗。
    的頭像 發(fā)表于 10-28 14:30 ?1723次閱讀
    淺談芯片制造的<b class='flag-5'>完整流程</b>