鴻蒙手錶定位功能Demo體驗,適用兒童、老年和外出旅游安全市場

来源:https://www.cnblogs.com/hmscore/archive/2022/03/18/16021869.html
-Advertisement-
Play Games

針對兒童和老人,可穿戴的智能手錶用處很大。市場也有許多類似的產品,支持接打電話、支付掃碼、定位等功能,屬於新興的商業機會。依托華為品牌,鴻蒙手錶也致力為用戶打造精品的、產品質量佳、可穿戴的智能體驗。對此,HMS Core 定位服務(Location Kit)可以提供三個主要能力,包括融合定位、活動識 ...


针对儿童和老人,可穿戴的智能手表用处很大。市场也有许多类似的产品,支持接打电话、支付扫码、定位等功能,属于新兴的商业机会。依托华为品牌,鸿蒙手表也致力为用户打造精品的、产品质量佳、可穿戴的智能体验。对此,HMS Core 定位服务(Location Kit)可以提供三个主要能力,包括融合定位、活动识别和地理围栏。接下来,小编邀请开发者们通过简单快速的几步,体验定位服务在鸿蒙手表上开发的定位功能。

一、 定位服务的优势和限制

  1. 定位低功耗:利用芯片实现地理围栏,功耗更低。

  2. 定位高精度:优化城市峡谷下道路两侧的定位准确率,准确率高。基于RTK(Real - time kinematic)技术,实现开阔地亚米级高精定位能力。

  3. 最新版本SDK需要用户手机上安装HMS Core(APK)6.0.0以上版本。若未安装,或安装了其他版本的HMS Core(APK),功能可以正常使用,但不支持版本自动升级。

  4. HarmonyOS通过数字证书和Profile文件来对应用进行管控,只有签名过的HarmonyOS Ability Package(以下简称“HAP”)才被允许安装到设备上运行。

二、 Demo介绍

为了让开发者更好的了解鸿蒙手表定位功能的实现,这里提供了一个简单的集成案例,邀请大家用简单的代码运行Demo。代码能力包括请求回调定位功能,获取缓存定位信息,查询定位信息是否可用及检查设置权限等

三、 开发实战

下面为开发者们介绍如何根据源代码将这个Demo运行起来,以便于了解实现细节。

开发准备

1. 工具准备

测试设备 HarmonyOS 2.0及以上的华为智能手表

开发工具 DevEco Studio 2.1.0.201及以上

2. 开发前准备

  1. 注册成为华为开发者,创建一个应用

参考定位服务开发准备在华为应用市场创建一个您的应用。

  1. 生成数字证书和Profile文件

详细步骤包括申请应用调试证书注册调试设备申请调试Profile ,配置签名信息。

  1. 生成签名证书指纹 ,配置签名证书指纹。

  2. 集成HMS Core SDK

• 将AGC的agconnect-services.json文件下载到本地,并放应用级根目录 “entry\src\main\resources\rawfile” 路径下。

• 在文件头部声明下一行添加如下配置apply plugin: 'com.huawei.agconnect'. 项目级“build.gradle”文件,添加Maven仓地址和agconnect服务依赖。

buildscript {
    repositories {
        maven {url 'https://repo.huaweicloud.com/repository/maven/'}
        // 配置HMS Core SDK的Maven仓地址
        maven {url 'https://developer.huawei.com/repo/'}
        jcenter()
    }
    dependencies {
        classpath 'com.huawei.ohos:hap:2.4.4.2'
        // 添加agconnect服务依赖
        classpath 'com.huawei.agconnect:agcp-harmony:1.1.0.300'
        classpath 'com.huawei.ohos:decctest:1.2.4.0'
    }
}

allprojects {
    repositories {
        maven {url 'https://repo.huaweicloud.com/repository/maven/'}
        // 配置HMS Core SDK的Maven仓地址
        maven {url 'https://developer.huawei.com/repo/'}
        jcenter()
    }
}

• 应用级的build.gradle文件添加依赖(实际中按照需要设置版本号) 或者在本地“libs”目录放在Location Kit的har包。

dependencies {
implementation 'com.huawei.hms:location-ohos:6.0.0.300'
// agconnect依赖组件
implementation 'com.huawei.agconnect:agconnect-core-harmony:1.1.0.300'
}

• 如需混淆代码 打开应用级根目录下的混淆配置文件“proguard-rules.pro”,加入排除HMS Core SDK的混淆配置。

运行示例应用效果展示

1. 声明系统权限 在“config.json”文件中的“reqPermissions”字段中添加下列权限

采用HarmonyOS提供了两种位置权限:ohos.permission.LOCATION (位置权限)和ohos.permission.LOCATION_IN_BACKGROUND(后台定位权限)。注意还需要网络权限。

"reqPermissions": [
   {
    "reason": "get Local Location",
    "name": "ohos.permission.LOCATION",
    "usedScene": {
      "ability": [
        "com.huawei.codelab.MainAbility",
      ],
      "when": "always"
    }
  },
  {
    "name": "ohos.permission.GET_NETWORK_INFO"
  },
  {
    "name": "ohos.permission. LOCATION_IN_BACKGROUND"
  }
  1. 在代码中动态申请“ohos.permission.LOCATION ”和“ohos.permission.LOCATION_IN_BACKGROUND”权限
//以location权限为例
if (verifySelfPermission("ohos.permission.LOCATION") != IBundleManager.PERMISSION_GRANTED) {
    printLog(HiLog.INFO, TAG, "Self: LOCATION permission not granted!");
    if (canRequestPermission("ohos.permission.LOCATION")) {
        printLog(HiLog.INFO, TAG, "Self: can request permission here");
        requestPermissionsFromUser(
                new String[]{"ohos.permission.LOCATION"}, REQUEST_CODE);
    } else {
        printLog(HiLog.WARN, TAG, "Self: enter settings to set permission");
    }
} else {
    printLog(HiLog.INFO, TAG, "Self: LOCATION permission granted!");
}

关键代码说明

1. 创建定位服务客户端

在基类BaseAbilitySlice中的onStart()方法中创建一个FusedLocationProviderClient实例,通过该实例调用定位相关接口。

public FusedLocationProviderClient fusedLocProviderClient;
@Override
protected void onStart(Intent intent) {
    super.onStart(intent);
    fusedLocProviderClient = new FusedLocationClient(this);
}

2. 检查设备定位设置

调用LocationRequest设置定位请求参数(包括设置位置更新的间隔(毫秒:单位),权重,返回地址信息的语言等),并在请求回调之前调用定位服务检查定位相关设置。

private void checkLocationSettings() {
    LocationRequest locationRequest = new LocationRequest();
    locationRequest.setPriority(100);
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
    LocationSettingsRequest request =
            builder.addLocationRequest(locationRequest).setAlwaysShow(false).setNeedBle(false).build();
    settingsClient.checkLocationSettings(request)
            .addOnSuccessListener(response -> {
                // 设置成功定位条件
            })
            .addOnFailureListener(exp -> {
                // 设置不满足定位条件
            });
}

3. 定位功能相关实现步骤

调用requestLocationUpdates()进行持续定位。

fusedLocProviderClient.requestLocationUpdates(locationRequest, locationCallback)
        .addOnSuccessListener(var -> {
            // 接口调用成功的处理
        })
        .addOnFailureListener(e -> {
            // 接口调用失败的处理           
        });

调用removeLocationUpdates()停止位置更新。

//注意:停止位置更新时,mLocationCallback与requestLocationUpdates()中的LocationCallback参数为同一对象。
fusedLocProviderClient.removeLocationUpdates(locationCallback)
        .addOnSuccessListener(var -> {
            // 接口调用成功的处理
        })
        .addOnFailureListener(e -> {
            // 接口调用失败的处理        
        });

定义位置更新回调。

LocationCallback locationCallback = new LocationCallback() {
    @Override
    public void onLocationResult(LocationResult locationResult) {
        if (locationResult != null) {
            // 处理位置回调结果
        }
    }
    @Override
    public void onLocationAvailability(LocationAvailability locationAvailability) {
        super.onLocationAvailability(locationAvailability);
        if (locationAvailability != null) {
            // 处理位置状态
        }
    }
};

相关参数说明

1. 设置定位类型,如果请求GNSS位置,则值为100;如请求网络位置,则值为102或104;如不需要主动请求位置,仅需被动接收位置,则值为105。

2. 定位设置的语言。当前仅支持EN和CN。

3. setNumUpdates请求位置的回调次数,假如值为3时,则只回调3次结果给客户端。如果想要一直持续回调尽量使用默认值。

欲了解更多HMS Core 定位服务详情,请参阅:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/introduction-0000001050706106?ha_source=hms1
华为开发者联盟官网:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/harmonyos-introduction-0000001121618904?ha_source=hms1
下载demo和示例代码请到Github:
https://github.com/HMS-Core/hms-location-demo-harmonyos
解决集成问题请到Stack Overflow:
https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest

了解更多详情>>

访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHubGitee

关注我们,第一时间了解 HMS Core 最新技术资讯~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Android跨進程要掌握的是Binder, 而同一進程中最重要的應該就是Handler 消息通信機制了。我這麼說,大家不知道是否認同,如果認同,還希望能給一個關註哈。 什麼是Handler? Handler主要用於非同步消息的處理:當發出一個消息之後,首先進入一個消息隊列,發送消息的[函數]即刻返回 ...
  • Google Analytics: Universal Analytics增強型電子商務,可以讓運營人員輕鬆地跟蹤用戶在其購物歷程中與產品的互動,包括產品展示、產品點擊、查看產品詳情、將產品添加到購物車、結賬流程、交易以及退款等操作。 目前,Google Analytics: Uniersal An ...
  • 如果我們需要設置一個view在另一個view的右邊緣距離一定距離的地方,利用Masonry這麼寫: offset可以讓我們在設置視圖之間相對位置時起到很大作用,但是也有很多情況下用不到,比如size、center等等,而調查Maronry的底層方法,可以看到和offset類似的方法還有很多: off ...
  • RGB、YUV、HSV和HSL區別和關聯 近期在做的一個需求和顏色轉換有關係,所以本篇將開發過程中比較常見的 四種顏色 進行一番梳理。 一、RGB顏色空間 從我們最常見的RGB顏色出發,RGB分別對應著 Red(紅)、Green(綠)、Blue(藍),也就是我們平時所說的三原色,調整這三種顏色的比例 ...
  • 現在的SIM卡通常具備基站定位、語音通話、簡訊消息、網路流量這四大功能,而在移動端是無法對SIM卡使用基站定位功能的,所以這裡只介紹移動端如何使用SIM卡實現語音通話、簡訊消息、數據流量三個功能。 ##語音通話 Android系統中提供了通話服務,同時自帶系統級應用可以通過該通話服務使用SIM卡的通 ...
  • Android 12(API 31)於2021年10月4日正式發佈,正式版源代碼也於當日被推送到AOSP Android開源項目。截止到筆者撰寫這篇文章時,國內各終端廠商的在售Android設備,已經逐步開啟了Android 12正式版本的更新。當前,對於Android應用開發者來說,Android... ...
  • 最近表弟一直在找實習,經常會問我一些問題,有些問題在沒有經歷過真實工作時是真的不好理解的,所以我開了這個【表弟專欄】,專門為找工作的表弟解決一些疑惑。 這篇文章從電腦發展的角度出發,描述為什麼電腦需要劃分 "主/子線程" 和 "同/非同步",希望這個故事你能喜歡。 開天闢地,電腦"老計"誕生 話 ...
  • 代碼變更溯源 工作時,我們經常會想要查看一個類文件的變更歷史,最常見的場景是:"卧槽,誰改了我的代碼" 新版本的Xcode溯源自我感覺相當難用,所以這裡我們介紹一個工具 SourceTree 來完成這項工作。 將項目工程載入到 SourceTree 當我們把項目工程拖到 SourceTree 之後, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...