云网牛站
所在位置:首页 > HarmonyOS问题与回答 > HarmonyOS应用开发之地图软件在第一次启动时获取当前位置

HarmonyOS应用开发之地图软件在第一次启动时获取当前位置

2021-07-07 16:25:59作者:面向对象思考稿源:HarmonyOS站

问题:在鸿蒙HarmonyOS应用开发中获取当前位置,目前的地图软件只能表示固定位置的地图,我们希望在画面第一次启动时能够显示当前所在位置的地图。

 

回答:

1、声明定位权限

修改所在HAP的config.json文件,以便获取定位权限:

"reqPermissions": [

  ...

  {

    "name": "ohos.permission.LOCATION",

    "reason": "$string:reason_location",

    "usedScene": {

      "ability": [

        "com.myapplication.LocationAbility"

      ],

      "when": "always"

    }

},

...

2、申请定位权限

我们通过以下两个方法是申请定位权限的代码:

private void register(Context ability) {

    context = ability;

    requestPermission(PERM_LOCATION);

}

private void requestPermission(String permission) {

    if (context.verifySelfPermission(permission) != IBundleManager.PERMISSION_GRANTED) {

        context.requestPermissionsFromUser(new String[] {permission}, 0);

    }

}

有了这两个方法,我们只要在适当的位置调用register方法就可以了。

3、注册定位响应代码

申请当前位置是一个异步处理,需要准备并注册一个回调对象:

private void registerLocationEvent() {

    if (hasPermissionGranted(PERM_LOCATION)) {

        locator = new Locator(context);

        requestParam = new RequestParam(RequestParam.SCENE_NAVIGATION);

        locator.requestOnce(requestParam, locatorCallback);

    }

}

private void unregisterLocationEvent() {

    if (locator != null) {

        locator.stopLocating(locatorCallback);

    }

}

private boolean hasPermissionGranted(String permission) {

    return context.verifySelfPermission(permission) == IBundleManager.PERMISSION_GRANTED;

}

private class MyLocatorCallback implements LocatorCallback {

    @Override

    public void onLocationReport(Location location) {

        HiLog.info(LABEL, "onLocationReport");

        TaskDispatcher uiTaskDispatcher = owner_slice.getUITaskDispatcher();

        Revocable revocable = uiTaskDispatcher.asyncDispatch(new Runnable() {

            @Override

            public void run() {

                tileMap.setLocation(location.getLongitude(), location.getLatitude());

            }

        });

    }

    @Override

    public void onStatusChanged(int type) {

    }

    @Override

    public void onErrorReport(int type) {

    }

}

在registerLocationEvent方法用来注册一个单次定位事件请求;在定位事件响应对象中我们将获得的位置信息通知给地图对象。

4、参考代码

完整代码可以从以下链接下载:

https://github.com/xueweiguo/Harmony/tree/master/StopWatch

HarmonyOS应用开发之地图软件在第一次启动时获取当前位置

获取设备的位置信息:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/device-location-info-0000000000031900

 

说明:

相关参考:在鸿蒙HarmonyOS中支持接入第三方地图吗,应该怎么接入地图

精选文章
热门文章