HarmonyOS鸿蒙Next中如何利用Map+ML kit高效实现导航语音播报功能?

HarmonyOS鸿蒙Next中如何利用Map+ML kit高效实现导航语音播报功能? 一、项目背景

在日常的地图应用中,通常都有实现导航功能,导航主要使用了路线规划和TTS语音播报的能力,HMS Core的Map kit和ML kit分别提供了这两种能力。

项目用到的关键功能点:

地图显示:使用map kit在界面上绘制地图。

路径规划: 使用map kit的路线规划api。

TTS: ML kit中提供了讲文本转化成语音的接口。

二、集成准备

AGC账号注册,项目创建

1)注册成为开发者

注册地址: https://developer.huawei.com/consumer/en/service/josp/agc/index.html

2)创建应用,添加sha256,开启map/site开关,下载json文件

  1. 集成map + ML SDK

1)将“agconnect-services.json”文件拷贝到应用级根目录下

在“allprojects > repositories”中配置HMS Core SDK的Maven仓地址。

在“buildscript > repositories”中配置HMS Core SDK的Maven仓地址。

如果App中添加了“agconnect-services.json”文件则需要在“buildscript > dependencies”中增加agc配置。

2)在“dependencies ”中添加如下编译依赖

dependencies {
    implementation 'com.huawei.hms:maps:{version}'
    implementation 'com.huawei.hms:ml-computer-voice-tts: {version}'
}

3)在文件头添加配置

apply plugin: 'com.huawei.agconnect'

4)在android中配置签名。将生成签名证书指纹用的签名文件复制到您工程的app目录下,并在“build.gradle”文件中配置签名

signingConfigs {
    release {
        // 签名证书
        storeFile file("**.**")
        // 密钥库口令
        storePassword "******"
        // 别名
        keyAlias "******"
        // 密钥口令
        keyPassword "******"
        v2SigningEnabled true
    }
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        debuggable true
    }
    debug {
        debuggable true
    }
}

三、项目中用到的主要代码及功能

地图绘制

@Override
public void onMapReady(HuaweiMap huaweiMap) {
    hMap = huaweiMap;
    hMap.moveCamera(CameraUpdateFactory.newLatLngZoom(Constants.sMylatLng, 1));
    hMap.setMyLocationEnabled(true);
    hMap.getUiSettings().setMyLocationButtonEnabled(true);
    initCluster(huaweiMap);
}

在地图上选两个点进行路径规划。

NetworkRequestManager.getWalkingRoutePlanningResult(latLng1, latLng2,
    new NetworkRequestManager.OnNetworkListener() {
        @Override
        public void requestSuccess(String result) {
            generateRoute(result);
        }
        @Override
        public void requestFail(String errorMsg) {
            Message msg = Message.obtain();
            Bundle bundle = new Bundle();
            bundle.putString("errorMsg", errorMsg);
            msg.what = 1;
            msg.setData(bundle);
            mHandler.sendMessage(msg);
        }
    });

对规划结果进行处理,转为目标文本,通过TTS播报出来

MLTtsEngine mlTtsEngine;
MLTtsConfig mlConfigs;
mlConfigs = new MLTtsConfig()
    // Set the text converted from speech to English.
    // MLTtsConstants.TTS_EN_US: converts text to English.
    // MLTtsConstants.TTS_ZH_HANS: converts text to Chinese.
    .setLanguage(MLTtsConstants.TTS_EN_US)
    // Set the English timbre.
    // MLTtsConstants.TTS_SPEAKER_FEMALE_ZH: Chinese female voice.
    // MLTtsConstants.TTS_SPEAKER_MALE_ZH: Chinese male voice.
    .setPerson(MLTtsConstants.TTS_SPEAKER_FEMALE_EN)
    // Set the speech speed. Range: 0.2–1.8. 1.0 indicates 1x speed.
    .setSpeed(1.0f)
    // Set the volume. Range: 0.2–1.8. 1.0 indicates 1x volume.
    .setVolume(1.0f);
mlTtsEngine = new MLTtsEngine(mlConfigs);
// Pass the TTS callback to the TTS engine.
mlTtsEngine.setTtsCallback(callback);
String distance = "1.9 km";
String time = "23min";
String begainRoad = "Poortown Road.";
text = getTTStext(distance, text, begainRoad);
mlTtsEngine.speak(text, MLTtsEngine.QUEUE_APPEND);

四、项目成果展示

打开应用,地图展示,绘制默认标记点,一个为起点,另一个为终点。

点击 walking , 开始路线规划,并且规划结束会有语音提示,“Start navigation. The total distance is %s. The estimated duration is %s. The initial road is %s”


更多关于HarmonyOS鸿蒙Next中如何利用Map+ML kit高效实现导航语音播报功能?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中如何利用Map+ML kit高效实现导航语音播报功能?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,利用Map和ML Kit高效实现导航语音播报功能的步骤如下:

  1. 集成地图服务:使用鸿蒙的Map Kit获取实时位置和导航路线数据。
  2. 语音合成:通过ML Kit的语音合成功能,将导航指令转换为语音。
  3. 事件监听:监听地图的导航事件,如转弯、到达目的地等,触发语音播报。
  4. 优化性能:通过异步处理和缓存机制,确保语音播报的实时性和流畅性。

结合Map Kit和ML Kit,可以高效实现精准的导航语音播报功能。

回到顶部