91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

前言

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

需求分析

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

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

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

要想實(shí)現(xiàn)一次完整的定位流程,必須根據(jù)需要分析一步步去實(shí)現(xiàn),由于高德地圖的引入太過(guò)于簡(jiǎn)單,這里一筆帶過(guò)。重點(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 定位開(kāi)關(guān)是否開(kāi)啟,如果沒(méi)有開(kāi)啟則提示用戶跳轉(zhuǎn)到系統(tǒng)指定位置打開(kāi)。
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 打開(kāi)之后,開(kāi)始 申請(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. 如果用戶打開(kāi)權(quán)限,則直接開(kāi)始定位服務(wù),否則提示用戶跳轉(zhuǎn)到系統(tǒng)指定位置打開(kāi)權(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)限沒(méi)問(wèn)題后,開(kāi)始定位,高德提供的定位有多次和單次,這里使用單次定位。
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)聽(tīng)
      this.locationManger?.setLocationListener(AMapLocationType.Single, this.listener)
    }
    // 啟動(dòng)定位
    this.locationManger?.requestSingleLocation()
  1. 定位成功拿到定位的信息,在實(shí)際開(kāi)發(fā)中盡管設(shè)置中已經(jīng)設(shè)置返回逆地理信息,但并沒(méi)有返回具體信息,這點(diǎn)實(shí)在是無(wú)法理解,只能得到當(dāng)前位置的經(jīng)緯度。這個(gè)時(shí)候需要將經(jīng)緯度轉(zhuǎn)換為當(dāng)前位置名稱。
  2. 在開(kāi)發(fā)中通過(guò)使用華為官方系統(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)起來(lái)比較簡(jiǎn)單,但是完整的定位流程及細(xì)節(jié)處理才是本篇文章的關(guān)鍵,相信看完本篇文章你已經(jīng)學(xué)會(huì)在鴻蒙中怎么使用高德定位功能了,快去動(dòng)手嘗試一下吧!

審核編輯 黃宇

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

    關(guān)注

    5

    文章

    1589

    瀏覽量

    36709
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2153

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    【RK3568 NPU實(shí)戰(zhàn)】別再閑置你的NPU!手把手帶你用迅為資料跑通Android AI檢測(cè)Demo,附完整流程與效果

    【RK3568 NPU實(shí)戰(zhàn)】別再閑置你的NPU!手把手帶你用迅為資料跑通Android AI檢測(cè)Demo,附完整流程與效果
    的頭像 發(fā)表于 11-10 15:58 ?1069次閱讀
    【RK3568 NPU<b class='flag-5'>實(shí)戰(zhàn)</b>】別再閑置你的NPU!手把手帶你用迅為資料跑通Android AI檢測(cè)Demo,附<b class='flag-5'>完整流程</b>與效果

    LuatOS AGPS 輔助定位開(kāi)發(fā)實(shí)戰(zhàn)教程

    為解決傳統(tǒng) GPS 定位慢、功耗的痛點(diǎn),AGPS 技術(shù)通過(guò)輔助數(shù)據(jù)注入提升效率。本教程以 LuatOS 開(kāi)發(fā)環(huán)境為基礎(chǔ),循序漸進(jìn)地講解 AGPS 輔助定位的開(kāi)發(fā)流程,包括 AGPS
    的頭像 發(fā)表于 10-31 17:34 ?1192次閱讀
    LuatOS AGPS 輔助<b class='flag-5'>定位</b>開(kāi)發(fā)<b class='flag-5'>實(shí)戰(zhàn)</b>教程

    地圖與通義實(shí)驗(yàn)室達(dá)成深度合作

    在AI原生浪潮推動(dòng)下,阿里巴巴集團(tuán)旗下地圖與通義實(shí)驗(yàn)室宣布達(dá)成深度合作,并在近日發(fā)布的地圖
    的頭像 發(fā)表于 08-15 17:23 ?1631次閱讀

    如何實(shí)現(xiàn)3秒定位?GNSS模組實(shí)戰(zhàn)指南大公開(kāi)

    傳統(tǒng)定位耗時(shí)過(guò)長(zhǎng)?GNSS模組讓3秒極速定位成為現(xiàn)實(shí)。本文為你提供實(shí)戰(zhàn)指南,詳解操作步驟與技術(shù)要點(diǎn),助你輕松達(dá)成目標(biāo)。在緊急救援、智能交通等場(chǎng)景中,3秒
    的頭像 發(fā)表于 08-08 17:10 ?1007次閱讀
    如何實(shí)現(xiàn)3秒<b class='flag-5'>定位</b>?GNSS模組<b class='flag-5'>實(shí)戰(zhàn)</b>指南大公開(kāi)

    地圖攜手夸克AI眼鏡開(kāi)啟出行新方式

    地圖與夸克AI眼鏡的聯(lián)合創(chuàng)新,不僅為智能眼鏡行業(yè)注入了新的活力,也為整個(gè)出行生態(tài)帶來(lái)了顛覆性變革。
    的頭像 發(fā)表于 08-06 16:35 ?1955次閱讀

    HarmonyOS 5】鴻蒙星閃NearLink詳解

    HarmonyOS 5】鴻蒙星閃NearLink詳解 ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 鴻蒙星閃NearLink Kit
    的頭像 發(fā)表于 07-11 18:24 ?1903次閱讀
    【<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 ?699次閱讀
    是<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)航,為行車安全與效率帶來(lái)全新升級(jí)。
    的頭像 發(fā)表于 07-02 16:44 ?1401次閱讀

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

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

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

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

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

    HarmonyOS 5】桌面快捷方式功能實(shí)現(xiàn)詳解 ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 在移動(dòng)應(yīng)用開(kāi)發(fā)中,如何讓用戶快速
    的頭像 發(fā)表于 06-21 16:42 ?2283次閱讀
    【<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詳解(三) ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 本文是鴻蒙中的UIAbility
    的頭像 發(fā)表于 06-14 22:32 ?755次閱讀

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

    前言 地圖定位功能基本上已經(jīng)成了日常應(yīng)用程序的必備功能之一,在日常開(kāi)發(fā)地圖定位
    的頭像 發(fā)表于 06-09 14:59 ?752次閱讀
    <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 ?1474次閱讀

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

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