百度地图语音播报集成

步行导航

1、导航SDK配置

  (一)导航SDK核心集成

     现将onsdk_all.arr和NaviTis.arr复制libs里面

     有两种方法可以在Android studio引用.arr包

     方法一:

     导航SDK核心已经打包为一个独立的aar,命名为onsdk_all.aar,可以将其以aar module引入集成APP project,引入后,即可引用导航SDK相关类进行开发。

     File->new Moudle->Import .jar/.arr Package

     

    选择包的路径

    然后在添加对该moudle的引用

    implementation project(':onsdk_all')

方法二:

     在app目录下的gradle中添加如下代码:

android{
    repositories {
            jcenter()
            maven { url 'https://maven.google.com' }
            flatDir {
                dirs 'libs' 
            }

        }   
} 
dependencies {
    implementation(name: 'onsdk_all', ext: 'aar')
}

以上两种方法都可以成功引用.arr包

2、导航SDK依赖库集成

将下载的BaiduNavi_AndroidSDK复制到libs目录,并添加引用

3、导航SDK自带TTS集成

导航SDK自带TTS能力已经打包为一个独立的aar,命名为NaviTts.aar,可以将其以aar module引入集成APP project,引入后,可以利用导航SDK提供的TTS接口进行初始化。当不需要导航SDK自带TTS时,可以不进行集成,此时需要利用导航SDK支持外部TTS的方式进行TTS能力初始化。方法同导航SDK配置类似

4、此时可以build一下,会报Annotation processors must be explicitly declared now. 这个错误

在app的build.gradle文件中添加includeCompileClasspath参数:

android {
    defaultConfig {
        ...
        javaCompileOptions{
            annotationProcessorOptions {
                includeCompileClasspath true
            }
        }
    }
    ...
}

错误解决,在运行一次

会报包冲突这个错,具体解决方法看下一篇文章

5、SDK和TTS授权申请配置

SDK之前已经配置过了,AppID其实就是应用编号,AK那里可以看到

6、导航方式界面的布局

<!--
  ~ Copyright (C) 2018 Baidu, Inc. All Rights Reserved.
  -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <Button
        android:id="@+id/wgsNaviBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="国际经纬度坐标" />

    <Button
        android:id="@+id/gcjNaviBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="国测局坐标" />

    <Button
        android:id="@+id/bdmcNaviBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="百度墨卡托坐标" />

    <Button
        android:id="@+id/mDb06llNaviBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="百度经纬度坐标" />

    <Button
        android:id="@+id/mGotoSettingsBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="导航设置" />

</LinearLayout>

7、引擎初始化

   BaiduNaviManagerFactory.getBaiduNaviManager().init(this,
                mSDCardPath, APP_FOLDER_NAME, new IBaiduNaviManager.INaviInitListener() {

                    @Override
                    public void onAuthResult(int status, String msg) {
                        Log.v("zjzz",msg);
                        String result;
                        if (0 == status) {
                            result = "key校验成功!";
                        } else {
                            result = "key校验失败, " + msg;
                        }
                        Toast.makeText(DemoMainActivity.this, result, Toast.LENGTH_LONG).show();
                    }

                    @Override
                    public void initStart() {
                        Toast.makeText(DemoMainActivity.this, "百度导航引擎初始化开始", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void initSuccess() {
                        Toast.makeText(DemoMainActivity.this, "百度导航引擎初始化成功", Toast.LENGTH_SHORT).show();
                        hasInitSuccess = true;
                        // 初始化tts
                        initTTS();
                    }

                    @Override
                    public void initFailed() {
                        String a;
                        a="aaaa";
                        Toast.makeText(DemoMainActivity.this, "百度导航引擎初始化失败", Toast.LENGTH_SHORT).show();
                    }
                });

8、发起算路

  private void routeplanToNavi(final int coType) {
        if (!hasInitSuccess) {
            Toast.makeText(DemoMainActivity.this, "还未初始化!", Toast.LENGTH_SHORT).show();
        }

        BNRoutePlanNode sNode = new BNRoutePlanNode(116.30142, 40.05087, "百度大厦", "百度大厦", coType);
        BNRoutePlanNode eNode = new BNRoutePlanNode(116.39750, 39.90882, "北京天安门", "北京天安门", coType);
        switch (coType) {
            case BNRoutePlanNode.CoordinateType.GCJ02: {
                sNode = new BNRoutePlanNode(116.30142, 40.05087, "百度大厦", "百度大厦", coType);
                eNode = new BNRoutePlanNode(116.39750, 39.90882, "北京天安门", "北京天安门", coType);
                break;
            }
            case BNRoutePlanNode.CoordinateType.WGS84: {
                sNode = new BNRoutePlanNode(116.300821, 40.050969, "百度大厦", "百度大厦", coType);
                eNode = new BNRoutePlanNode(116.397491, 39.908749, "北京天安门", "北京天安门", coType);
                break;
            }
            case BNRoutePlanNode.CoordinateType.BD09_MC: {
                sNode = new BNRoutePlanNode(12947471, 4846474, "百度大厦", "百度大厦", coType);
                eNode = new BNRoutePlanNode(12958160, 4825947, "北京天安门", "北京天安门", coType);
                break;
            }
            case BNRoutePlanNode.CoordinateType.BD09LL: {
                sNode = new BNRoutePlanNode(116.30784537597782, 40.057009624099436, "百度大厦", "百度大厦", coType);
                eNode = new BNRoutePlanNode(116.40386525193937, 39.915160800132085, "北京天安门", "北京天安门", coType);
                break;
            }
            default:
                break;
        }

        mStartNode = sNode;

        List<BNRoutePlanNode> list = new ArrayList<BNRoutePlanNode>();
        list.add(sNode);
        list.add(eNode);

        BaiduNaviManagerFactory.getRoutePlanManager().routeplanToNavi(
                list,
                IBNRoutePlanManager.RoutePlanPreference.ROUTE_PLAN_PREFERENCE_DEFAULT,
                null,
                new Handler(Looper.getMainLooper()) {
                    @Override
                    public void handleMessage(Message msg) {
                        switch (msg.what) {
                            case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_START:
                                Toast.makeText(DemoMainActivity.this, "算路开始", Toast.LENGTH_SHORT)
                                        .show();
                                break;
                            case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_SUCCESS:
                                Toast.makeText(DemoMainActivity.this, "算路成功", Toast.LENGTH_SHORT)
                                        .show();
                                break;
                            case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_FAILED:
                                Toast.makeText(DemoMainActivity.this, "算路失败", Toast.LENGTH_SHORT)
                                        .show();
                                break;
                            case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_TO_NAVI:
                                Toast.makeText(DemoMainActivity.this, "算路成功准备进入导航", Toast.LENGTH_SHORT)
                                        .show();
                                Intent intent = new Intent(DemoMainActivity.this,
                                        TTSDemoGuideActivity.class);
                                Bundle bundle = new Bundle();
                                bundle.putSerializable(ROUTE_PLAN_NODE, mStartNode);
                                intent.putExtras(bundle);
                                startActivity(intent);
                                break;
                            default:
                                // nothing
                                break;
                        }
                    }
                });
    }

9、开始导航

新建诱导Activity,创建诱导View,开始导航

   mRouteGuideManager = BaiduNaviManagerFactory.getRouteGuideManager();
        View view = mRouteGuideManager.onCreate(this, mOnNavigationListener);

        if (view != null) {
            setContentView(view);
        }

10、正确管理WalkNavigateHelper对象生命周期。


    @Override
    protected void onStart() {
        super.onStart();
        mRouteGuideManager.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mRouteGuideManager.onResume();
        // 自定义图层
        showOverlay();
    }
 protected void onPause() {
        super.onPause();
        mRouteGuideManager.onPause();

    }

    @Override
    protected void onStop() {
        super.onStop();
        mRouteGuideManager.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mRouteGuideManager.onDestroy(false);
        EventHandler.getInstance().disposeDialog();
    }

    @Override
    public void onBackPressed() {
        mRouteGuideManager.onBackPressed(false, true);
    }

11、运行工程,可以成功进行导航

  该Demo源代码下载地址

安卓基于百度地图语音导游app开发是一种利用安卓系统和百度地图API的方式,提供语音导游功能的移动应用程序。 首先,安卓系统是目前最流行的移动操作系统之一,具有广泛的用户群体和强大的生态系统。借助安卓系统的开放性和灵活性,开发者可以更好地定制应用程序,并与其他安卓应用实现更好的兼容性。因此,选择在安卓平台上开发百度地图语音导游app可以获得更好的用户体验和市场潜力。 百度地图作为一款常用的地图应用程序,提供了丰富的地理信息和定位服务。百度地图API为开发者提供了语音导航、定位、POI搜索等功能接口,可用于构建个性化的地图应用。通过基于百度地图的API,开发者可以在安卓平台上实现语音导游功能,为用户提供语音导航、景点介绍等服务。这样, 用户可以通过语音导航,了解周边的景点、路线和导览信息,提供更加便捷和个性化的旅游服务。 在开发过程中,可以利用安卓的开发工具和百度地图API进行开发。使用安卓开发工具可以简化应用的开发流程,百度地图API提供的各种接口可以方便地集成到应用程序中,实现语音导游的功能。开发过程中,需要考虑用户界面的设计、语音识别与合成的集成,以及与百度地图API的交互等。通过充分利用安卓系统和百度地图API的优势,可以开发出稳定、功能丰富且易于使用的语音导游app。 总而言之,安卓基于百度地图语音导游app开发是将安卓系统和百度地图API相结合,为用户提供语音导游服务的一种开发方式。该应用可以在旅游、导览等领域为用户提供便捷的导航和信息服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值