写在前面的话:有可能环境有差别,如果你没有配成功,轻喷。如果有帮助到你,点个赞吧,让这个环境更多人看到,更多人使用。此环境使用的资源全部在末尾给出了链接。

文章目录

  • 效果图
  • 环境搭建
  • 资源下载
  • 觉得对你有用,可以请喝杯咖啡嘛,感谢感谢。
效果图

好像第一开始点击Hello World!会没有反应,你退出app然后再进去,再点击就可以导航了。

环境搭建
  • jar包和so包

这个环境集成了百度地图的所有,包括定位,POI检索,路线规划,直接下载我给你的资源就好,百度官方下载的有的类是重叠的,我这个是去了重复了的。

  • 资源文件

  • AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="cn.edu.zut.demonav"><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_GPS" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.FOREGROUND_SERVICE" /><uses-permission android:name="android.permission.CAMERA"/><uses-permission android:name="android.permission.RECORD_AUDIO"/><uses-permission android:name="android.permission.WRITE_SETTINGS"tools:ignore="ProtectedPermissions" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><uses-library android:name="org.apache.http.legacy" android:required="false"/><meta-dataandroid:name="BaiduMobAd_STAT_ID"android:value="48ae76de3f" /><meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="vhe1eqXLruBXB7EjkEvAUUrHLjwiGn0p" /><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name="cn.edu.zut.baidu.activity.DemoExtGpsActivity"/><activity android:name="cn.edu.zut.baidu.activity.DemoGuideActivity"android:theme="@android:style/Theme.NoTitleBar"/></application>
</manifest>
  • app内部的build.gradle
apply plugin: 'com.android.application'android {useLibrary 'org.apache.http.legacy'compileSdkVersion 28buildToolsVersion "29.0.3"defaultConfig {applicationId "cn.edu.zut.demonav"minSdkVersion 15targetSdkVersion 28versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"multiDexEnabled truejavaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }ndk {abiFilters 'armeabi-v7a'}}buildTypes {release {minifyEnabled falseshrinkResources falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}debug {minifyEnabled falseshrinkResources falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}lintOptions {abortOnError false}compileOptions {sourceCompatibility = 1.8targetCompatibility = 1.8}
}
repositories {flatDir {dirs 'libs'}
}
dependencies {implementation fileTree(include: ['*.jar'], dir: 'libs')implementation 'com.android.support:appcompat-v7:28.0.0'implementation 'com.android.support:recyclerview-v7:28.0.0'implementation(name: 'onsdk_all', ext: 'aar')implementation(name: 'NaviTts', ext: 'aar')
}
  • MainActivity
package cn.edu.zut.demonav;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.core.app.ActivityCompat;
import com.baidu.navisdk.adapter.BNRoutePlanNode;
import com.baidu.navisdk.adapter.BNaviCommonParams;
import com.baidu.navisdk.adapter.BaiduNaviManagerFactory;
import com.baidu.navisdk.adapter.IBNRoutePlanManager;
import com.baidu.navisdk.adapter.IBaiduNaviManager;import java.io.File;
import java.util.ArrayList;
import java.util.List;import cn.edu.zut.baidu.NormalUtils;
import cn.edu.zut.baidu.activity.DemoGuideActivity;public class MainActivity extends Activity {private static final String APP_FOLDER_NAME = "BNSDKSimpleDemo";private static final String[] authBaseArr = {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION};private static final int authBaseRequestCode = 1;private String mSDCardPath = null;private BNRoutePlanNode mStartNode = null;private BNRoutePlanNode mEndNode = null;private Button button;private double mCurrentLat = 0;private double mCurrentLng = 0;private LocationManager mLocationManager;private LocationListener mLocationListener = new LocationListener() {@Overridepublic void onLocationChanged(Location location) {mCurrentLat = location.getLatitude();mCurrentLng = location.getLongitude();Toast.makeText(MainActivity.this, mCurrentLat+ "--" + mCurrentLng, Toast.LENGTH_LONG).show();}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}@Overridepublic void onProviderEnabled(String provider) {}@Overridepublic void onProviderDisabled(String provider) {}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = findViewById(R.id.btn);initRoutePlanNode();if (initDirs()) {initNavi();}initLocation();button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (BaiduNaviManagerFactory.getBaiduNaviManager().isInited()) {if (mCurrentLat == 0 && mCurrentLng == 0) {return;}BNRoutePlanNode sNode = new BNRoutePlanNode.Builder().latitude(mCurrentLat).longitude(mCurrentLng).coordinateType(BNRoutePlanNode.CoordinateType.WGS84).build();BNRoutePlanNode eNode = new BNRoutePlanNode.Builder().latitude(39.908749).longitude(116.397491).name("北京天安门").description("北京天安门").coordinateType(BNRoutePlanNode.CoordinateType.WGS84).build();Log.i("Debug导航",mCurrentLat+" "+mCurrentLng);routePlanToNavi(sNode, eNode,null);}}});}private void initLocation() {mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);if (mLocationManager != null) {if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED) {Toast.makeText(this, "没有权限", Toast.LENGTH_SHORT).show();return;}mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000, 1000, mLocationListener);}}private void initRoutePlanNode() {mStartNode = new BNRoutePlanNode.Builder().latitude(40.050969).longitude(116.300821).name("百度大厦").description("百度大厦").coordinateType(BNRoutePlanNode.CoordinateType.WGS84).build();mEndNode = new BNRoutePlanNode.Builder().latitude(39.908749).longitude(116.397491).name("北京天安门").description("北京天安门").coordinateType(BNRoutePlanNode.CoordinateType.WGS84).build();}private boolean initDirs() {mSDCardPath = getSdcardDir();if (mSDCardPath == null) {return false;}File f = new File(mSDCardPath, APP_FOLDER_NAME);if (!f.exists()) {try {f.mkdir();} catch (Exception e) {e.printStackTrace();return false;}}return true;}private boolean hasBasePhoneAuth() {PackageManager pm = this.getPackageManager();for (String auth : authBaseArr) {if (pm.checkPermission(auth, this.getPackageName()) != PackageManager.PERMISSION_GRANTED) {return false;}}return true;}private void initNavi() {// 申请权限if (android.os.Build.VERSION.SDK_INT >= 23) {if (!hasBasePhoneAuth()) {this.requestPermissions(authBaseArr, authBaseRequestCode);return;}}if (BaiduNaviManagerFactory.getBaiduNaviManager().isInited()) {return;}BaiduNaviManagerFactory.getBaiduNaviManager().init(this,mSDCardPath, APP_FOLDER_NAME, new IBaiduNaviManager.INaviInitListener() {@Overridepublic void onAuthResult(int status, String msg) {String result;if (0 == status) {result = "key校验成功!";} else {result = "key校验失败, " + msg;}Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();}@Overridepublic void initStart() {Toast.makeText(MainActivity.this.getApplicationContext(),"百度导航引擎初始化开始", Toast.LENGTH_SHORT).show();}@Overridepublic void initSuccess() {Toast.makeText(MainActivity.this.getApplicationContext(),"百度导航引擎初始化成功", Toast.LENGTH_SHORT).show();// 初始化ttsinitTTS();}@Overridepublic void initFailed(int errCode) {Toast.makeText(MainActivity.this.getApplicationContext(),"百度导航引擎初始化失败 " + errCode, Toast.LENGTH_SHORT).show();}});}private String getSdcardDir() {if (Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)) {return Environment.getExternalStorageDirectory().toString();}return null;}private void initTTS() {// 使用内置TTSBaiduNaviManagerFactory.getTTSManager().initTTS(getApplicationContext(),getSdcardDir(), APP_FOLDER_NAME, NormalUtils.getTTSAppID());}private void routePlanToNavi(BNRoutePlanNode sNode, BNRoutePlanNode eNode, final Bundle bundle) {List<BNRoutePlanNode> list = new ArrayList<>();list.add(sNode);list.add(eNode);BaiduNaviManagerFactory.getRoutePlanManager().routeplanToNavi(list,IBNRoutePlanManager.RoutePlanPreference.ROUTE_PLAN_PREFERENCE_DEFAULT,bundle,new Handler(Looper.getMainLooper()) {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_START:Toast.makeText(MainActivity.this.getApplicationContext(),"算路开始", Toast.LENGTH_SHORT).show();break;case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_SUCCESS:Toast.makeText(MainActivity.this.getApplicationContext(),"算路成功", Toast.LENGTH_SHORT).show();// 躲避限行消息Bundle infoBundle = (Bundle) msg.obj;if (infoBundle != null) {String info = infoBundle.getString(BNaviCommonParams.BNRouteInfoKey.TRAFFIC_LIMIT_INFO);Log.d("OnSdkDemo", "info = " + info);}break;case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_FAILED:Toast.makeText(MainActivity.this.getApplicationContext(),"算路失败", Toast.LENGTH_SHORT).show();break;case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_TO_NAVI:Toast.makeText(MainActivity.this.getApplicationContext(),"算路成功准备进入导航", Toast.LENGTH_SHORT).show();Intent intent = null;if (bundle == null) {intent = new Intent(MainActivity.this,DemoGuideActivity.class);} else {intent = new Intent(MainActivity.this,DemoGuideActivity.class);}startActivity(intent);break;default:// nothingbreak;}}});}
}
  • 集成TTS,需要你去申请一个语音序列号,然后更换一下我的就好了

资源下载

   密码:z3x4
   我是链接

觉得对你有用,可以请喝杯咖啡嘛,感谢感谢。

最新版百度地图实现导航和语音播报(亲测有效)相关推荐

  1. 2019-详细Android Studio开发百度地图(5)—百度地图_导航和TTS语音播报的实现

    百度地图_导航和TTS语音播报的实现 前言 从小白一步步开始,很多资源是很久以前的,而且没有操作配套截图和资源分享.现在本踩过了很多坑,现在开发完成后决定重新写一份教程,希望能借此帮助到许多其他有这方 ...

  2. JQ----移动端h5页面通过地址调起通讯录以及高德地图、百度地图定位导航

    JQ----移动端h5页面通过地址调起通讯录以及高德地图.百度地图定位导航 通讯录: 可先加meta标签 <a href="tel:13838383838" class=&q ...

  3. 织梦charset.func.php,织梦程序百度php主动推送代码,亲测可用!

    随着百度生态环境及算法改变,内容质量对于搜索引擎来说越来越重要了,那么信息的实时传达到蜘蛛抓取是每位站长必须做到的事情了,链接提交工具是网站主动向百度搜索推送数据的工具,工具可缩短爬虫发现网站链接时间 ...

  4. 百度地图查看导航记录,导航路线,记录驾驶路线

    如图所示: 步骤: 1.打开APP:百度地图,登陆 2.点解左上角的头像 3.常用功能 > 足迹 4.右上角的"列表"按钮,(如图所示) 5.点击 你想要查看的 行程即可. ...

  5. 百度地图SDK导航(路径规划+实时导航)

    百度地图导航的官网:http://developer.baidu.com/map/index.php?title=android-navsdk 里面的demo写的非常详细 ,我主要说一下我个人遇到的问 ...

  6. android开发百度地图步行导航

    准备工作: 在百度地图上下载依赖,配置key. 创建一个demo项目,可显示百度地图的 添加按钮,点击按钮,开始导航 发起算路我用的是routePlanWithRouteNode这个方法,官网中rou ...

  7. 移动端h5页面打开高德地图或者百度地图实现导航

    需求场景:用户会收到一条短信,短信带着链接,点击链接跳转h5页面,h5页面实现跳转地图并实现导航. 方法:1.a标签直接打开地图,地图在浏览器支持跳转. 高德: <a href="ht ...

  8. android 百度地图驾车导航,百度地图API详解之驾车导航

    本文将向大家介绍如何使用百度地图API提供的驾车导航服务进行开发. 一个简单的示例 驾车导航服务根据传入的起点和终点信息给出从起点到终点的驾车路线,我们先从一个最简单的示例看起: var map = ...

  9. WEB页面或者H5页面如何打开高德或者百度地图APP导航(实战向)

    一.序言 在日常开发中,地图的接入使用在各大app和网站中我们都不难见到,打开方式也各有不同,嵌套内部的,或者是直接打开百度,高德,谷歌等地图app.相对来说,各大地图app的文档写的非常齐全,即使是 ...

  10. 百度地图 驾车导航用来生成路线 轨迹回放(LuShu)

    百度地图 秘钥申请(AK) 代码 <!DOCTYPE html> <html lang="en"> <head><meta charset ...

最新文章

  1. Python创建目录文件夹
  2. 记录一次nginx升级,支持ipv4和ipv6访问https
  3. 使用 kubeadm 创建一个 kubernetes 集群
  4. Java 动态代理机制分析及扩展,第 1 部分
  5. 好好爱惜自己的牙齿(电动牙刷)
  6. php过滤第一个逗号和最后一个逗号,PHP字符过滤函数去除字符串最后一个逗号(rtrim)...
  7. JDK自带监控工具 jps、jinfo、jstat、jmap、jconsole
  8. mysql添加外键约束的两种方式(重要)
  9. webwork在freemarker中使用iterator
  10. 制度化规范化标准化精细化_制度化、标准化、流程化,走向精细化管理的蜕变...
  11. c语言warning scanf,【C】将m~n之间的素数输出与VS2005以上版本对C语言的scanf的警告warning C4996...
  12. Hotmail怎么进不去?!
  13. html屏幕共享,屏幕共享
  14. 电商推荐系统论文:基于Spark机器学习的电商推荐系统的设计与实现,大数据电商推荐系统毕设论文,Spring MLlib电商推荐系统
  15. h5 api-获得地理经纬度和异常处理
  16. 新手自己搭建服务器步骤
  17. TPH-YOLOv5: Improved YOLOv5 Based on Transformer Prediction Head forObject Detection on Drone-captur
  18. 使用 brew 安装mongodb
  19. 10.6版本的CodeWarrior 的使用手册
  20. 薇电子学与计算机好中吗,微电子学与计算机是什么级别的期刊

热门文章

  1. 强制横屏java_Android强制设定横屏时,SurfaceView一直黑屏
  2. 方便面又好卖了!康师傅天猫618狂增10倍,还说这只是起点
  3. Pyechart绘制疫情发文可视化动态地图
  4. shell学习(一)简单示例help用法
  5. 密码学之前后向安全性
  6. k近邻算法与kd树的创建和搜索
  7. Windows 操作系统成功背后的传奇工程师
  8. linux ipcs字段含义 共享内存删除 ipcs dest状态
  9. Linux和Windows中下载FFmpeg
  10. 麻省理工学院公开课:算法导论