HMS Core 成長相伴,為孩子“戴”來安全的六一節禮物


六一節就要到了,越來越多的家庭開始選擇兒童手表作為禮物送給孩子們。各種數據表明,不論在海外還是國內,兒童手表的出貨量持續快速的增長。在中國,兒童手表幾乎成為孩子們的最貼身的伙伴,中國市場的占比高達95%,成為全球兒童手表最生機勃勃的市場1。

 

縱觀近三年的兒童手表發展趨勢,以小天才為主的TOP3的廠商集中在中高檔位的價值區,而中低檔位的市場分布也較為平均穩定,這樣,給孩子和家長帶來的選擇相對來說較為多。華為作為兒童手表市場近些年的新入局者,提供了通話、定位、安全等一系列的智能關懷場景,受到了孩子們和家長的歡迎和好評。

 

通過和市面上的用戶訪談發現,在小學階段兒童手表已經成為了普適產品,年級越低的孩子越喜歡,而年級越高的孩子對功能性和款式要求越高。因此,功能、外觀、口碑已然是消費者購買兒童手表考慮的主要因素,而如今安全、溝通則是大多數家長最為關心的核心能力。作為家長,需要隨時了解孩子當前處於什么位置,使得孩子在學校室內活動、室外野炊、上下學路上等各種場合中,最大限度的保障孩子的安全,讓家長動態、實時了解孩子的行動軌跡,甚至在緊急時候及時地提供溝通對話。因此,提升續航能力、提升定位精准度,是決定兒童手表推薦與否的核心訴求。

 

我們知道,定位能力的精准度取決於基站、衛星、Wi-Fi等多種信號因素,天氣和周邊環境也是決定定位成功與否、准確與否的參考因素。而兒童手表定位作為在非手機側的一種定位場景,大多數是無法實現多種信號融合的定位模式。但是,孩子佩戴后的定位精准度,對於家長是至關重要的訴求,既然這樣,如何提升手表上的定位精度呢,我們介紹下Petal Maps Platform定位能力,可幫助手表廠商實現國內,乃至海外定位無縫銜接。

 

 

兒童手表集成網絡定位服務后,可以有效提升定位體驗,簡單易開發,降低維護成本。同時,當孩子在室內時,手表可以定位到樓層以及附近的POI,可實時反饋給家長,幫助找回在商場跑動的孩子,大幅度降低兒童在室內走丟的風險。在國內,綜合網絡定位成功率高達99%,在海外,網絡定位成功率與其它廠商持平2。

 

 

 

 

可以想象一下,借助Petal Maps Platform的網絡定位,室內高精度定位,家長便可查看孩子在地圖上的位置以及當天的活動歷史,確保孩子不會訪問危險的地方。借助Petal Maps Platform的低功耗地理圍欄功能,家長可以檢查孩子是否准時來到學校,了解他們何時來到學校,活動以及他們何時回家。當應用在后台休眠的情況下,家長仍能及時收到信息推送。

 

當然,除了以上介紹的兒童手表外,智能手表和手機應用均能實現高精度定位能力,在國內和海外,集成Location Kit獲得高精度定位體驗的場景枚不勝數。滴滴出行實現城市打車不錯邊,華為運動健康低功耗地計步生成運動記錄等。

 

有了這樣強大能力的兒童手表、智能手表的保駕護航,相信他們都可以成為孩子和家長在兒童節的心動禮物選擇

 

當前, Location Kit的網絡定位采用REST API形式,不受限於系統環境,在Android、iOS、Web頁面、Windows應用等環境都可以獲取定位數據。下面簡單介紹下網絡定位的開發示例教程。

開發准備

1、 在華為AppGallery Connect網站創建應用

2、 拷貝應用的API Key

開發步驟

1.獲取設備網絡信息:目前網絡定位支持的網絡參數主要有兩種,Wi-Fi信息或蜂窩網絡信息。本文采用的是根據WLAN信息的方式。

 

public WifiInfo getWIFIInfo(Context context) {
      WifiManager wifiMgr = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
      return wifiMgr.getConnectionInfo();
}

 

2.構造網絡定位請求:參考API文檔,構造json格式的請求消息體。

public String getRequestBody(WifiInfo[] wifiInfos) {

    

  try {
           JSONObject request = new JSONObject();
           request.put("boottime", SystemClock.elapsedRealtime() * 1000);
           request.put("indoorMode", 0);
 
           JSONArray infos = new JSONArray();
           for (int i = 0; i < wifiInfos.length; i++) {
                 JSONObject wifiInfo = new JSONObject();
                 wifiInfo.put("mac", wifiInfos[i].getMacAddress());
                 wifiInfo.put("rssi", wifiInfos[i].getRssi());
                 wifiInfo.put("time", SystemClock.elapsedRealtime() * 1000);
                 infos.put(wifiInfo);
           }
           request.put("wifiInfos", wifiInfos);
           return request.toString();
      } catch (JSONException e) {
           e.printStackTrace();
           return "";
      }
}

 

3.請求網絡定位

 

private String getNetworkLocation(String body, String apiKey) {
      HttpClient httpClient = new HttpClient.Builder().readTimeout(5000).connectTimeout(5000).build();
      Request.Builder requestBuilder = httpClient.newRequest().url("https://locationapi.cloud.huawei.com/networklocation/v1/geoLocation").method("POST");
      // 設置Request Header
      requestBuilder.addHeader("Authorization", "Bearer " + apiKey);
      requestBuilder.addHeader("Content-Type", "application/json");
      requestBuilder.requestBody(new RequestBody() {
           @Override
           public String contentType() {
                 return "application/json";
           }
          
           @Override
           public void writeTo(OutputStream outputStream) throws IOException {
                 outputStream.write(body.getBytes(Charset.defaultCharset()));
                 outputStream.flush();
           }
      });
     
      try {
           Response<ResponseBody> response = httpClient.newSubmit(requestBuilder.build()).execute();
           if (response.getCode() == 200) {
                 InputStream is = response.getBody().getInputStream();
                 ByteArrayOutputStream message = new ByteArrayOutputStream();
                 int len = 0;
                 byte[] buffer = new byte[1024];
                 while ((len = is.read(buffer)) != -1) {
                      message.write(buffer, 0, len);
                 }
                 is.close();
                 message.close();
                 return new String(message.toByteArray(), Charset.defaultCharset());
           }
      } catch (IOException e) {
           Log.e(TAG, e.getMessage(), e);
      }
      return null;
}

 

開發效果

編譯安裝完成后,連接Wi-Fi,開啟應用,就可以僅通過網絡定位得到用戶的位置,結果如下。

 

{
    "indoor": 0,
    "errorCode": "0",
    "position": {
        "acc": 14.400121,
        "bearing": 0.0,
        "floorAcc": 0,
        "flags": 17,
        "lon": 113.86621570429958,
        "speed": 0.0,
        "mode": 0,
        "time": 0,
        "floor": 0,
        "indoorFlag": 0,
        "lat": 22.881333903191347
    },
    "locateType": "Wifi",
    "extraInfo": {
        "wifiExtraInfo": {
            "resultCode": 0,
            "macDetails": [
                0,
                1,
                2
            ],
            "extraPosition": {
                "acc": 23.040194,
                "bearing": 0.0,
                "flags": 17,
                "lon": 113.86621570429958,
                "speed": 0.0,
                "mode": 0,
                "lat": 22.881333903191347
            }
        }
    },
    "errorMsg": "Success"
}

1、  數據來源於第三方報告

2、  數據來源於華為內部實驗室測試結果

 

原文鏈接:https://developer.huawei.com/consumer/cn/forum/topic/0202579274146220076?fid=18

原作者:胡椒


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM