1、在AndroidManifest.xml文件加入配置權限
<!-- 讀寫sd卡 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- 寫sd卡 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_GPS"/> <!-- 獲取精確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> <!-- 獲取網絡狀態 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"> </uses-permission> <!-- 更改wifi連狀態 --> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <!-- 獲取wifi狀態 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
2、在MainActivity的布局文件中加入導航按鈕
<Button android:id="@+id/btn_Navi" android:text="導航" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="110dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" />
3、下載導航的資源包一一加入到項目當中(提取碼:k0il)
4、把下載好的com中的sdkdemo文件包,放到項目中java/com下(和之前的baidu、example文件包放在一起)
5、導入全部包后,在build.gradle文件中加入如下一段代碼
ndk { abiFilters "armeabi", "x86", "x86_64", "mips64", "mips" }
如下圖(記得點擊Android studio右上角的“Sync Now”同步):
6、附上MainActivity的代碼
package com.example.baidumap; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import android.Manifest; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; 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 com.baidu.location.BDAbstractLocationListener; import com.baidu.location.BDLocation; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.CoordType; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.map.MyLocationConfiguration; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.map.OverlayOptions; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.overlayutil.BikingRouteOverlay; import com.baidu.mapapi.overlayutil.DrivingRouteOverlay; import com.baidu.mapapi.overlayutil.MassTransitRouteOverlay; import com.baidu.mapapi.overlayutil.TransitRouteOverlay; import com.baidu.mapapi.overlayutil.WalkingRouteOverlay; import com.baidu.mapapi.search.core.SearchResult; import com.baidu.mapapi.search.route.BikingRoutePlanOption; import com.baidu.mapapi.search.route.BikingRouteResult; import com.baidu.mapapi.search.route.DrivingRoutePlanOption; import com.baidu.mapapi.search.route.DrivingRouteResult; import com.baidu.mapapi.search.route.IndoorRouteResult; import com.baidu.mapapi.search.route.MassTransitRoutePlanOption; import com.baidu.mapapi.search.route.MassTransitRouteResult; import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener; import com.baidu.mapapi.search.route.PlanNode; import com.baidu.mapapi.search.route.RoutePlanSearch; import com.baidu.mapapi.search.route.TransitRoutePlanOption; import com.baidu.mapapi.search.route.TransitRouteResult; import com.baidu.mapapi.search.route.WalkingRoutePlanOption; import com.baidu.mapapi.search.route.WalkingRouteResult; import com.baidu.navisdk.adapter.BNRoutePlanNode; import com.baidu.navisdk.adapter.BaiduNaviManagerFactory; import com.baidu.navisdk.adapter.IBNRoutePlanManager; import com.baidu.navisdk.adapter.IBNTTSManager; import com.baidu.navisdk.adapter.IBaiduNaviManager; import com.sdkdemo.NormalUtils; import com.sdkdemo.newif.DemoGuideActivity; import java.io.File; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private MapView mMapView = null; private BaiduMap mBaiduMap = null; private Context context; //定位相關 private double mLatitude; private double mLongtitude; //方向傳感器 private MyOrientationListener mMyOrientationListener; private float mCurrentX; //自定義圖標 private BitmapDescriptor mIconLocation; private LocationClient mLocationClient; public BDAbstractLocationListener myListener; private LatLng mLastLocationData; private boolean isFirstin = true; // 路線規划相關 private RoutePlanSearch mSearch = null; //導航相關 private static final String APP_FOLDER_NAME = "MyBNDTSDK-Api"; private String mSDCardPath = null; private static final String[] authBaseArr = { Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION }; private static final int authBaseRequestCode = 1; private boolean hasInitSuccess = false; static final String ROUTE_PLAN_NODE = "routePlanNode"; private BNRoutePlanNode mStartNode = null; private LatLng mDestLocationData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); SDKInitializer.setCoordType(CoordType.BD09LL); this.context = this; mMapView = (MapView) findViewById(R.id.baiduMapView); //獲取地圖控件引用 mBaiduMap = mMapView.getMap(); initMyLocation(); initPoutePlan(); button(); initLongClick(); //初始化導航相關 if(initDirs()){ initNavi(); } } protected void onStart() { super.onStart(); //開啟定位 mBaiduMap.setMyLocationEnabled(true); if (!mLocationClient.isStarted()) mLocationClient.start(); //開啟方向傳感器 mMyOrientationListener.start(); } @Override protected void onResume() { super.onResume(); mMapView.onResume(); } @Override protected void onPause() { super.onPause(); mMapView.onPause(); } @Override protected void onStop() { super.onStop(); //停止定位 mBaiduMap.setMyLocationEnabled(false); mLocationClient.stop(); //停止方向傳感器 mMyOrientationListener.stop(); } @Override protected void onDestroy() { super.onDestroy(); mBaiduMap.setMyLocationEnabled(false); mMapView.onDestroy(); mMapView = null; mSearch.destroy(); } @Override public void onClick(View v) { SDKInitializer.initialize(getApplicationContext()); switch (v.getId()) { case R.id.btn_Location: { centerToMyLocation(mLatitude, mLongtitude); break; } case R.id.btn_Plan: { Intent intent = new Intent(context,RoutePlanActivity.class); startActivityForResult(intent,0x11); break; } case R.id.btn_Navi: if(mDestLocationData == null){ Toast.makeText(context, "長按設置導航目標地點", Toast.LENGTH_SHORT).show(); return; } routeplanToNavi(); break; } } //按鈕響應 private void button() { //按鈕 Button btn_Location = (Button) findViewById(R.id.btn_Location); Button btn_Plan = (Button) findViewById(R.id.btn_Plan); Button btn_Navi = (Button) findViewById(R.id.btn_Navi); //按鈕處理 btn_Location.setOnClickListener(this); btn_Plan.setOnClickListener(this); btn_Navi.setOnClickListener(this); } //定位 private class MyLocationListener extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation location) { //mapView 銷毀后不在處理新接收的位置 if (location == null || mMapView == null){ return; } MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此處設置開發者獲取到的方向信息,順時針0-360 .direction(mCurrentX).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); //設置自定義圖標 MyLocationConfiguration config = new MyLocationConfiguration( MyLocationConfiguration.LocationMode.NORMAL, true, mIconLocation); mBaiduMap.setMyLocationConfiguration(config); //更新經緯度 mLatitude = location.getLatitude(); mLongtitude = location.getLongitude(); //設置起點 mLastLocationData = new LatLng(mLatitude, mLongtitude); if (isFirstin) { centerToMyLocation(location.getLatitude(), location.getLongitude()); if (location.getLocType() == BDLocation.TypeGpsLocation) { // GPS定位結果 Toast.makeText(context, "定位:"+location.getAddrStr(), Toast.LENGTH_SHORT).show(); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) { // 網絡定位結果 Toast.makeText(context, "定位:"+location.getAddrStr(), Toast.LENGTH_SHORT).show(); } else if (location.getLocType() == BDLocation.TypeOffLineLocation) { // 離線定位結果 Toast.makeText(context, "定位:"+location.getAddrStr(), Toast.LENGTH_SHORT).show(); } else if (location.getLocType() == BDLocation.TypeServerError) { Toast.makeText(context, "定位:服務器錯誤", Toast.LENGTH_SHORT).show(); } else if (location.getLocType() == BDLocation.TypeNetWorkException) { Toast.makeText(context, "定位:網絡錯誤", Toast.LENGTH_SHORT).show(); } else if (location.getLocType() == BDLocation.TypeCriteriaException) { Toast.makeText(context, "定位:手機模式錯誤,請檢查是否飛行", Toast.LENGTH_SHORT).show(); } isFirstin = false; } } } //初始化定位 private void initMyLocation() { //縮放地圖 MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f); mBaiduMap.setMapStatus(msu); //開啟定位 mBaiduMap.setMyLocationEnabled(true); //聲明LocationClient類 mLocationClient = new LocationClient(this); //通過LocationClientOption設置LocationClient相關參數 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 打開gps option.setCoorType("bd09ll"); // 設置坐標類型 option.setIsNeedAddress(true);//設置是否需要地址信息 option.setScanSpan(1000); //設置locationClientOption mLocationClient.setLocOption(option); myListener = new MyLocationListener(); //注冊監聽函數 mLocationClient.registerLocationListener(myListener); //初始化圖標 mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.navi_map_gps); initOrientation(); //開始定位 mLocationClient.start(); } //回到定位中心 private void centerToMyLocation(double latitude, double longtitude) { mBaiduMap.clear(); mLastLocationData = new LatLng(latitude, longtitude); MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(mLastLocationData); mBaiduMap.animateMapStatus(msu); } //傳感器 private void initOrientation() { //傳感器 mMyOrientationListener = new MyOrientationListener(context); mMyOrientationListener.setOnOrientationListener(new MyOrientationListener.OnOrientationListener() { @Override public void onOrientationChanged(float x) { mCurrentX = x; } }); } //路線規划初始化 private void initPoutePlan() { mSearch = RoutePlanSearch.newInstance(); mSearch.setOnGetRoutePlanResultListener(listener); } // 路線規划模塊 public OnGetRoutePlanResultListener listener = new OnGetRoutePlanResultListener() { @Override public void onGetWalkingRouteResult(WalkingRouteResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(MainActivity.this, "路線規划:未找到結果,檢查輸入", Toast.LENGTH_SHORT).show(); //禁止定位 isFirstin = false; } assert result != null; if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) { // 起終點或途經點地址有岐義,通過以下接口獲取建議查詢信息 result.getSuggestAddrInfo(); return; } if (result.error == SearchResult.ERRORNO.NO_ERROR) { mBaiduMap.clear(); Toast.makeText(MainActivity.this, "路線規划:搜索完成", Toast.LENGTH_SHORT).show(); WalkingRouteOverlay overlay = new WalkingRouteOverlay(mBaiduMap); overlay.setData(result.getRouteLines().get(0)); overlay.addToMap(); overlay.zoomToSpan(); } //禁止定位 isFirstin = false; } @Override public void onGetTransitRouteResult(TransitRouteResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(MainActivity.this, "路線規划:未找到結果,檢查輸入", Toast.LENGTH_SHORT).show(); //禁止定位 isFirstin = false; } assert result != null; if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) { // 起終點或途經點地址有岐義,通過以下接口獲取建議查詢信息 result.getSuggestAddrInfo(); return; } if (result.error == SearchResult.ERRORNO.NO_ERROR) { mBaiduMap.clear(); Toast.makeText(MainActivity.this, "路線規划:搜索完成", Toast.LENGTH_SHORT).show(); TransitRouteOverlay overlay = new TransitRouteOverlay(mBaiduMap); overlay.setData(result.getRouteLines().get(0)); overlay.addToMap(); overlay.zoomToSpan(); } //禁止定位 isFirstin = false; } @Override public void onGetMassTransitRouteResult(MassTransitRouteResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(MainActivity.this, "路線規划:未找到結果,檢查輸入", Toast.LENGTH_SHORT).show(); //禁止定位 isFirstin = false; } assert result != null; if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) { // 起終點或途經點地址有岐義,通過以下接口獲取建議查詢信息 result.getSuggestAddrInfo(); return; } if (result.error == SearchResult.ERRORNO.NO_ERROR) { mBaiduMap.clear(); Toast.makeText(MainActivity.this, "路線規划:搜索完成", Toast.LENGTH_SHORT).show(); MassTransitRouteOverlay overlay = new MassTransitRouteOverlay(mBaiduMap); overlay.setData(result.getRouteLines().get(0)); overlay.addToMap(); overlay.zoomToSpan(); } //禁止定位 isFirstin = false; } @Override public void onGetDrivingRouteResult(DrivingRouteResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(MainActivity.this, "路線規划:未找到結果,檢查輸入", Toast.LENGTH_SHORT).show(); //禁止定位 isFirstin = false; } assert result != null; if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) { // 起終點或途經點地址有岐義,通過以下接口獲取建議查詢信息 result.getSuggestAddrInfo(); return; } if (result.error == SearchResult.ERRORNO.NO_ERROR) { mBaiduMap.clear(); Toast.makeText(MainActivity.this, "路線規划:搜索完成", Toast.LENGTH_SHORT).show(); DrivingRouteOverlay overlay = new DrivingRouteOverlay(mBaiduMap); overlay.setData(result.getRouteLines().get(0)); overlay.addToMap(); overlay.zoomToSpan(); } //禁止定位 isFirstin = false; } @Override public void onGetIndoorRouteResult(IndoorRouteResult var1) { } @Override public void onGetBikingRouteResult(BikingRouteResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(MainActivity.this, "路線規划:未找到結果,檢查輸入", Toast.LENGTH_SHORT).show(); //禁止定位 isFirstin = false; } assert result != null; if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) { // 起終點或途經點地址有岐義,通過以下接口獲取建議查詢信息 result.getSuggestAddrInfo(); return; } if (result.error == SearchResult.ERRORNO.NO_ERROR) { mBaiduMap.clear(); Toast.makeText(MainActivity.this, "路線規划:搜索完成", Toast.LENGTH_SHORT).show(); BikingRouteOverlay overlay = new BikingRouteOverlay(mBaiduMap); overlay.setData(result.getRouteLines().get(0)); overlay.addToMap(); overlay.zoomToSpan(); } //禁止定位 isFirstin = false; } }; //開始規划 private void StarRoute(int id,ArrayList list) { SDKInitializer.initialize(getApplicationContext()); //經緯度規划路線和動態輸入規划路線二選一 // 設置起、終點信息 動態輸入規划路線 PlanNode stNode = PlanNode.withCityNameAndPlaceName(list.get(0).toString(), list.get(1).toString()); PlanNode enNode = PlanNode.withCityNameAndPlaceName(list.get(2).toString(), list.get(3).toString()); //經緯度規划路線 // LatLng startPoint = new LatLng(39.917380, 116.37978); // LatLng endPoint = new LatLng(22.27503, 113.523431); // PlanNode stNode = PlanNode.withLocation(startPoint); // PlanNode enNode = PlanNode.withLocation(endPoint); switch (id){ case 1: mSearch.drivingSearch((new DrivingRoutePlanOption()).from(stNode).to(enNode)); break; case 2: if(list.get(0).toString() == list.get(2).toString()){ mSearch.transitSearch((new TransitRoutePlanOption()).from(stNode).to(enNode)); }else{ mSearch.masstransitSearch((new MassTransitRoutePlanOption()).from(stNode).to(enNode)); } break; default:break; } } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == 0x11){ ArrayList address = data.getCharSequenceArrayListExtra("address"); StarRoute(resultCode,address); } } //導航 ----獲取Sdcard目錄 private String getSdcardDir() { if (Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)) { return Environment.getExternalStorageDirectory().toString(); } return null; } //初始化導航目錄 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 initTTS() { // 使用內置TTS BaiduNaviManagerFactory.getTTSManager().initTTS(getApplicationContext(), getSdcardDir(), APP_FOLDER_NAME, NormalUtils.getTTSAppID()); // 注冊同步內置tts狀態回調 BaiduNaviManagerFactory.getTTSManager().setOnTTSStateChangedListener( new IBNTTSManager.IOnTTSPlayStateChangedListener() { @Override public void onPlayStart() { Log.e("BNSDKDemo", "ttsCallback.onPlayStart"); } @Override public void onPlayEnd(String speechId) { Log.e("BNSDKDemo", "ttsCallback.onPlayEnd"); } @Override public void onPlayError(int code, String message) { Log.e("BNSDKDemo", "ttsCallback.onPlayError"); } } ); // 注冊內置tts 異步狀態消息 BaiduNaviManagerFactory.getTTSManager().setOnTTSStateChangedHandler( new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { Log.e("BNSDKDemo", "ttsHandler.msg.what=" + msg.what); } } ); } //初始化導航 private void initNavi() { // 申請權限 if (android.os.Build.VERSION.SDK_INT >= 23) { if (!hasBasePhoneAuth()) { this.requestPermissions(authBaseArr, authBaseRequestCode); return; } } BaiduNaviManagerFactory.getBaiduNaviManager().init(this, mSDCardPath, APP_FOLDER_NAME, new IBaiduNaviManager.INaviInitListener() { @Override public 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(); } @Override public void initStart() { Toast.makeText(MainActivity.this, "導航引擎初始化開始", Toast.LENGTH_SHORT).show(); } @Override public void initSuccess() { Toast.makeText(MainActivity.this, "導航引擎初始化成功", Toast.LENGTH_SHORT).show(); hasInitSuccess = true; // 初始化tts initTTS(); } @Override public void initFailed() { Toast.makeText(MainActivity.this, "導航引擎初始化失敗", Toast.LENGTH_SHORT).show(); } }); } //添加導航目的地圖標 private void addDestInfoOverlay(LatLng latLng) { mBaiduMap.clear(); OverlayOptions options = new MarkerOptions().position(latLng) .icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_geo)) .zIndex(5); mBaiduMap.addOverlay(options); } //坐標轉換 public static BDLocation bd2gcj(BDLocation loc) { return LocationClient.getBDLocationInCoorType(loc,BDLocation.BDLOCATION_BD09LL_TO_GCJ02); } //導航算路 private void routeplanToNavi() { final int coType = BNRoutePlanNode.CoordinateType.GCJ02; if (!hasInitSuccess) { Toast.makeText(MainActivity.this, "還未初始化!", Toast.LENGTH_SHORT).show(); } BDLocation srcBdLocation = new BDLocation(); srcBdLocation.setLatitude(mLastLocationData.latitude); srcBdLocation.setLongitude(mLastLocationData.longitude); BDLocation srcGcj = bd2gcj(srcBdLocation); BDLocation destBdLocation = new BDLocation(); destBdLocation.setLatitude(mDestLocationData.latitude); destBdLocation.setLongitude(mDestLocationData.longitude); BDLocation destGcj = bd2gcj(destBdLocation); BNRoutePlanNode sNode = new BNRoutePlanNode(srcGcj.getLongitude(),srcGcj.getLatitude(),"我的地點",null,coType); BNRoutePlanNode eNode = new BNRoutePlanNode(destGcj.getLongitude(),destGcj.getLatitude(),"目標地點",null,coType); mStartNode = sNode; List<BNRoutePlanNode> list = new ArrayList<>(); 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(MainActivity.this, "導航:算路開始", Toast.LENGTH_SHORT) .show(); break; case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_SUCCESS: Toast.makeText(MainActivity.this, "導航:算路成功", Toast.LENGTH_SHORT) .show(); break; case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_FAILED: Toast.makeText(MainActivity.this, "導航:算路失敗", Toast.LENGTH_SHORT) .show(); break; case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_TO_NAVI: Toast.makeText(MainActivity.this, "導航:算路成功准備進入導航", Toast.LENGTH_SHORT) .show(); Intent intent = new Intent(MainActivity.this, DemoGuideActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable(ROUTE_PLAN_NODE, mStartNode); intent.putExtras(bundle); startActivity(intent); break; default: // nothing break; } } }); } //長按處理 private void initLongClick() { mBaiduMap.setOnMapLongClickListener(new BaiduMap.OnMapLongClickListener() { @Override public void onMapLongClick(LatLng latLng) { Toast.makeText(context,"導航:設置目的地成功", Toast.LENGTH_LONG).show(); mDestLocationData = latLng; addDestInfoOverlay(latLng); } }); } }
7、在AndroidManifest.xml中聲明定位的activity組件
<activity android:name="com.sdkdemo.newif.DemoGuideActivity"/> <activity android:name="com.sdkdemo.liteapp.LiteActivity"/>
8、加上語音播報導航路線(點擊跳轉到語音創建地址):
1.找到語音技術或者語音識別(點擊創建應用)
2.填上必填的,包名寫自個的包名
3.進入應用管理或進入語音技術-應用列表
4.復制AppId到MainActivity找到初始化語音播報那段代碼(按住Ctrl+鼠標鍵跳轉到NormalUtils類下)
5.把剛才復制的APPId放到返回的return中
9、啟動項目(這是用手機啟動的項目,用模擬器可能會出現閃退)
10、啟動的過程中可能會出現一個錯誤,有一個.os沒找到
1.在build.gradle去掉主動導入jniLibs文件包(記得點擊右上角的“Sync Now”同步)
2.下載一個jniLibs文件包(在之前下載的百度地圖資源包中包含jniLibs包),點擊獲取(提取碼:urgy)
3.把jniLibs文件復制到項目中main文件下
11、附上項目代碼(點擊獲取,提取碼:le4c),下載下來的項目可能會出現缺少KEY的錯誤