准备工作在以前一篇博客中写过了:http://www.cnblogs.com/rainday1/p/5305469.html

但是官网下载的最新jar包不需要单独导入定位包,而且有些类过时了,所以这里面的方法可能与上一篇有点不一样

工程结构:

0.准备类

TTSController.java

package util;import android.content.Context;
import android.os.Bundle;import com.amap.api.navi.AMapNaviListener;
import com.amap.api.navi.model.AMapLaneInfo;
import com.amap.api.navi.model.AMapNaviCross;
import com.amap.api.navi.model.AMapNaviInfo;
import com.amap.api.navi.model.AMapNaviLocation;
import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
import com.amap.api.navi.model.AimLessModeCongestionInfo;
import com.amap.api.navi.model.AimLessModeStat;
import com.amap.api.navi.model.NaviInfo;
import com.autonavi.tbt.TrafficFacilityInfo;
import com.example.bmap.R;
import com.iflytek.cloud.speech.SpeechConstant;
import com.iflytek.cloud.speech.SpeechError;
import com.iflytek.cloud.speech.SpeechListener;
import com.iflytek.cloud.speech.SpeechSynthesizer;
import com.iflytek.cloud.speech.SpeechUser;
import com.iflytek.cloud.speech.SynthesizerListener;/*** 璇煶鎾姤缁勪欢*/
public class TTSController implements SynthesizerListener, AMapNaviListener {public static TTSController ttsManager;boolean isfinish = true;private Context mContext;// 鍚堟垚瀵硅薄.private SpeechSynthesizer mSpeechSynthesizer;/*** 鐢ㄦ埛鐧诲綍鍥炶皟鐩戝惉鍣�.*/private SpeechListener listener = new SpeechListener() {@Overridepublic void onData(byte[] arg0) {}@Overridepublic void onCompleted(SpeechError error) {if (error != null) {}}@Overridepublic void onEvent(int arg0, Bundle arg1) {}};TTSController(Context context) {mContext = context;}public static TTSController getInstance(Context context) {if (ttsManager == null) {ttsManager = new TTSController(context);}return ttsManager;}public void init() {SpeechUser.getUser().login(mContext, null, null,"appid=" + mContext.getString(R.string.app_id), listener);// 鍒濆鍖栧悎鎴愬璞�.mSpeechSynthesizer = SpeechSynthesizer.createSynthesizer(mContext);initSpeechSynthesizer();}/*** 浣跨敤SpeechSynthesizer鍚堟垚璇煶锛屼笉寮瑰嚭鍚堟垚Dialog.** @param*/public void playText(String playText) {if (!isfinish) {return;}if (null == mSpeechSynthesizer) {// 鍒涘缓鍚堟垚瀵硅薄.mSpeechSynthesizer = SpeechSynthesizer.createSynthesizer(mContext);initSpeechSynthesizer();}// 杩涜璇煶鍚堟垚.mSpeechSynthesizer.startSpeaking(playText, this);}public void stopSpeaking() {if (mSpeechSynthesizer != null)mSpeechSynthesizer.stopSpeaking();}public void startSpeaking() {isfinish = true;}private void initSpeechSynthesizer() {// 璁剧疆鍙戦煶浜�
        mSpeechSynthesizer.setParameter(SpeechConstant.VOICE_NAME,mContext.getString(R.string.preference_default_tts_role));// 璁剧疆璇��
        mSpeechSynthesizer.setParameter(SpeechConstant.SPEED,"" + mContext.getString(R.string.preference_key_tts_speed));// 璁剧疆闊抽噺
        mSpeechSynthesizer.setParameter(SpeechConstant.VOLUME,"" + mContext.getString(R.string.preference_key_tts_volume));// 璁剧疆璇皟
        mSpeechSynthesizer.setParameter(SpeechConstant.PITCH,"" + mContext.getString(R.string.preference_key_tts_pitch));}@Overridepublic void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {// TODO Auto-generated method stub
}@Overridepublic void onCompleted(SpeechError arg0) {// TODO Auto-generated method stubisfinish = true;}@Overridepublic void onSpeakBegin() {// TODO Auto-generated method stubisfinish = false;}@Overridepublic void onSpeakPaused() {// TODO Auto-generated method stub
}@Overridepublic void onSpeakProgress(int arg0, int arg1, int arg2) {// TODO Auto-generated method stub
}@Overridepublic void onSpeakResumed() {// TODO Auto-generated method stub
}public void destroy() {if (mSpeechSynthesizer != null) {mSpeechSynthesizer.stopSpeaking();}}@Overridepublic void onArriveDestination() {// TODO Auto-generated method stubthis.playText("鍒拌揪鐩殑鍦�");}@Overridepublic void onArrivedWayPoint(int arg0) {// TODO Auto-generated method stub
    }@Overridepublic void onCalculateRouteFailure(int arg0) {this.playText("璺緞璁$畻澶辫触锛岃妫�鏌ョ綉缁滄垨杈撳叆鍙傛暟");}@Overridepublic void onCalculateRouteSuccess() {String calculateResult = "璺緞璁$畻灏辩华";this.playText(calculateResult);}@Overridepublic void onEndEmulatorNavi() {this.playText("瀵艰埅缁撴潫");}@Overridepublic void onGetNavigationText(int arg0, String arg1) {// TODO Auto-generated method stubthis.playText(arg1);}@Overridepublic void onInitNaviFailure() {// TODO Auto-generated method stub
}@Overridepublic void onInitNaviSuccess() {// TODO Auto-generated method stub
}@Overridepublic void onLocationChange(AMapNaviLocation arg0) {// TODO Auto-generated method stub
}@Overridepublic void onReCalculateRouteForTrafficJam() {// TODO Auto-generated method stubthis.playText("鍓嶆柟璺嚎鎷ュ牭锛岃矾绾块噸鏂拌鍒�");}@Overridepublic void onReCalculateRouteForYaw() {this.playText("鎮ㄥ凡鍋忚埅");}@Overridepublic void onStartNavi(int arg0) {// TODO Auto-generated method stub
}@Overridepublic void onTrafficStatusUpdate() {// TODO Auto-generated method stub
}@Overridepublic void onGpsOpenStatus(boolean arg0) {// TODO Auto-generated method stub
}@Overridepublic void onNaviInfoUpdated(AMapNaviInfo arg0) {// TODO Auto-generated method stub
}@Overridepublic void onNaviInfoUpdate(NaviInfo arg0) {// TODO Auto-generated method stub
}@Overridepublic void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) {}@Overridepublic void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {}@Overridepublic void showCross(AMapNaviCross aMapNaviCross) {}@Overridepublic void hideCross() {}@Overridepublic void showLaneInfo(AMapLaneInfo[] aMapLaneInfos, byte[] bytes, byte[] bytes1) {}@Overridepublic void hideLaneInfo() {}@Overridepublic void onCalculateMultipleRoutesSuccess(int[] ints) {}@Overridepublic void notifyParallelRoad(int i) {}@Overridepublic void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {}@Overridepublic void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {}@Overridepublic void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {}
}

View Code

Utils.java

package util;public class Utils {public static final String DAY_NIGHT_MODE = "daynightmode";public static final String DEVIATION = "deviationrecalculation";public static final String JAM = "jamrecalculation";public static final String TRAFFIC = "trafficbroadcast";public static final String CAMERA = "camerabroadcast";public static final String SCREEN = "screenon";public static final String THEME = "theme";public static final String ISEMULATOR = "isemulator";public static final String ACTIVITYINDEX = "activityindex";public static final int SIMPLEHUDNAVIE = 0;public static final int EMULATORNAVI = 1;public static final int SIMPLEGPSNAVI = 2;public static final int SIMPLEROUTENAVI = 3;public static final boolean DAY_MODE = false;public static final boolean NIGHT_MODE = true;public static final boolean YES_MODE = true;public static final boolean NO_MODE = false;public static final boolean OPEN_MODE = true;public static final boolean CLOSE_MODE = false;}

View Code

border.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >  <solid android:color="@color/grey" />  <stroke  android:width="0.1dp"  android:color="@color/black" />  <padding  android:bottom="1dp"  android:left="0.5dp"  android:right="0.5dp"  android:top="0dp" />
</shape>  

View Code

whiteborder.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >  <solid android:color="@color/white" />  <stroke  android:width="0.1dp"  android:color="@color/black" />  <padding  android:bottom="1dp"  android:left="0.5dp"  android:right="0.5dp"  android:top="0dp" />
</shape>  

View Code

whitedownborder.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >  <solid android:color="@color/white" />  <stroke  android:width="0.1dp"  android:color="@color/black" />  </shape>  

View Code

线路规划:

1.分配权限

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.bmap"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="14"android:targetSdkVersion="18" /><!-- //地图包、搜索包需要的基础权限 --><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- 定位包、导航包需要的额外权限(注:基础权限也需要) --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /><uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><meta-dataandroid:name="com.amap.api.v2.apikey"android:value="d278999928c69d384aabcc4493c40e36"/><!-- 定位需要的服务 --><service android:name="com.amap.api.location.APSService" ></service><activityandroid:name="com.example.bmap.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name="com.example.bmap.NaviCustomActivity"></activity><activity android:name="com.example.bmap.NaviRouteActivity"></activity><activity android:name="com.example.bmap.NaviSettingActivity"android:theme="@android:style/Theme.DeviceDefault.Dialog.NoActionBar"></activity></application></manifest>

View Code

2.主页面,显示地图+定位+路径规划

activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/grey"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" ><Buttonandroid:id="@+id/btn_bus"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="doClick"android:text="bus" /><Buttonandroid:id="@+id/btn_car"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="doClick"android:text="car" /><Buttonandroid:id="@+id/btn_walk"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="doClick"android:text="walk" />
<!--         <Buttonandroid:id="@+id/btn_beginNavigation"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="doClick"android:text="Navigation" /> --></LinearLayout><!--     <com.amap.api.maps.MapViewandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="wrap_content"></com.amap.api.maps.MapView> --><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/border" ><com.amap.api.maps.MapViewandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout><TextViewandroid:id="@+id/map_err"android:layout_width="match_parent"android:visibility="gone"android:layout_height="310dp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:paddingBottom="@dimen/margin_bottom"android:paddingLeft="@dimen/margin_left"android:paddingTop="@dimen/margin_top"android:text="@string/routeinfo_1"android:textColor="@color/black"android:textSize="@dimen/route_text_size" /><TextViewandroid:id="@+id/navi_route_distance_1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:paddingBottom="@dimen/margin_bottom"android:paddingLeft="@dimen/margin_left"android:paddingTop="@dimen/margin_top"android:text="@string/routeinfo_default"android:textColor="@color/red"android:textSize="@dimen/route_text_size" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:paddingBottom="@dimen/margin_bottom"android:paddingTop="@dimen/margin_top"android:text="@string/routeinfo_2"android:textColor="@color/black"android:textSize="@dimen/route_text_size" /><TextViewandroid:id="@+id/navi_route_time_1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:paddingBottom="@dimen/margin_bottom"android:paddingLeft="@dimen/margin_left"android:paddingTop="@dimen/margin_top"android:text="@string/routeinfo_default"android:textColor="@color/red"android:textSize="@dimen/route_text_size" /><TextViewandroid:id="@+id/navi_route_cost_before"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:paddingBottom="@dimen/margin_bottom"android:paddingTop="@dimen/margin_top"android:text="@string/routeinfo_3"android:textColor="@color/black"android:textSize="@dimen/route_text_size" /><TextViewandroid:id="@+id/navi_route_cost_1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:paddingBottom="@dimen/margin_bottom"android:paddingLeft="@dimen/margin_left"android:paddingTop="@dimen/margin_top"android:text="@string/routeinfo_default"android:textColor="@color/red"android:singleLine="true"android:textSize="@dimen/route_text_size" /><TextViewandroid:id="@+id/navi_route_cost_after"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:paddingBottom="@dimen/margin_bottom"android:paddingTop="@dimen/margin_top"android:text="@string/routeinfo_4"android:textColor="@color/black"android:textSize="@dimen/route_text_size" /></LinearLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" ><Buttonandroid:id="@+id/btn_beginNavigation"android:layout_width="match_parent"android:layout_height="@dimen/naviroute_navi_height"android:layout_alignParentRight="true"android:onClick="doClick"android:text="@string/start_navi_navi" /></RelativeLayout></LinearLayout>

View Code

MainActivity.java

package com.example.bmap;import java.util.ArrayList;
import java.util.List;import util.TTSController;
import android.app.ActionBar;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.location.Location;
import android.media.AudioManager;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.location.AMapLocationClientOption.AMapLocationMode;
import com.amap.api.maps.AMap;
import com.amap.api.maps.AMap.OnMapClickListener;
import com.amap.api.maps.AMap.OnMapLoadedListener;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.LocationSource;
import com.amap.api.maps.MapView;
import com.amap.api.maps.LocationSource.OnLocationChangedListener;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.overlay.BusRouteOverlay;
import com.amap.api.maps.overlay.DrivingRouteOverlay;
import com.amap.api.maps.overlay.WalkRouteOverlay;
import com.amap.api.navi.AMapNavi;
import com.amap.api.navi.AMapNaviListener;
import com.amap.api.navi.AMapNaviView;
import com.amap.api.navi.AMapNaviViewListener;
import com.amap.api.navi.AMapNaviViewOptions;
import com.amap.api.navi.model.AMapLaneInfo;
import com.amap.api.navi.model.AMapNaviCross;
import com.amap.api.navi.model.AMapNaviInfo;
import com.amap.api.navi.model.AMapNaviLocation;
import com.amap.api.navi.model.AMapNaviPath;
import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
import com.amap.api.navi.model.AimLessModeCongestionInfo;
import com.amap.api.navi.model.AimLessModeStat;
import com.amap.api.navi.model.NaviInfo;
import com.amap.api.navi.model.NaviLatLng;
import com.amap.api.navi.view.RouteOverLay;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.route.BusPath;
import com.amap.api.services.route.BusRouteResult;
import com.amap.api.services.route.DrivePath;
import com.amap.api.services.route.DriveRouteResult;
import com.amap.api.services.route.RouteSearch;
import com.amap.api.services.route.WalkPath;
import com.amap.api.services.route.WalkRouteResult;
import com.amap.api.services.route.RouteSearch.OnRouteSearchListener;
import com.autonavi.tbt.TrafficFacilityInfo;public class MainActivity extends Activity implements LocationSource,AMapLocationListener, OnRouteSearchListener,OnMapLoadedListener,AMapNaviViewListener {private MapView mMapView = null;private AMap aMap;// private LocationManagerProxy mLocationManagerProxy;private AMapLocationClient locationClient = null;private AMapLocationClientOption locationOption = null;private OnLocationChangedListener mListener;TextView mLocationErrText;RouteSearch.FromAndTo fromAndTo;// 起始点和终点的经纬度private RouteSearch mRouteSearch;private TextView mRouteDistanceView;// 距离显示控件private TextView mRouteTimeView;// 时间显示控件private TextView mRouteCostView;// 花费显示控件    private AMapNaviView mAmapAMapNaviView;private AMapNavi mAmapNavi;private RouteOverLay routeOverLay;private boolean mIsMapLoaded = false;private AMapNaviListener mAmapNaviListener;private ProgressDialog mProgressDialog;// 路径规划过程显示状态private int mNaviMethod;private boolean mIsGetGPS = false;// 记录GPS定位是否成功private NaviLatLng mStartPoint = new NaviLatLng();private List<NaviLatLng> mStartPoints = new ArrayList<NaviLatLng>();private Marker mGPSMarker;// 记录地图点击事件相应情况,根据选择不同,地图响应不同private int mMapClickMode = MAP_CLICK_NO;private static final int MAP_CLICK_NO = 0;// 地图不接受点击事件private static final int MAP_CLICK_START = 1;// 地图点击设置起点private static final int MAP_CLICK_WAY = 2;// 地图点击设置途经点private static final int MAP_CLICK_END = 3;// 地图点击设置终点
@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mLocationErrText = (TextView) findViewById(R.id.map_err);// 获取地图控件引用mMapView = (MapView) findViewById(R.id.map);// 在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理
        mMapView.onCreate(savedInstanceState);if (aMap == null) {// 初始化aMapaMap = mMapView.getMap();}aMap.setLocationSource(this);// 设置定位监听aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false// 设置定位的类型为定位模式,参见类AMap。定位(AMap.LOCATION_TYPE_LOCATE)、跟随(AMap.LOCATION_TYPE_MAP_FOLLOW)根据面向方向旋转(AMap.LOCATION_TYPE_MAP_ROTATE)
        aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);aMap.getUiSettings().setCompassEnabled(true);// 指南针aMap.getUiSettings().setZoomGesturesEnabled(true);// 通过手势缩放地图aMap.getUiSettings().setScrollGesturesEnabled(true);// 手势平移(滑动)地图aMap.getUiSettings().setRotateGesturesEnabled(true);// 手势旋转地图aMap.getUiSettings().setTiltGesturesEnabled(true);// 手势倾斜地图
aMap.moveCamera(CameraUpdateFactory.zoomTo(14));// //修改地图的中心点位置// CameraPosition cp = aMap.getCameraPosition();// CameraPosition cpNew = CameraPosition.fromLatLngZoom(new// LatLng(31.22, 121.48), cp.zoom);// CameraUpdate cu = CameraUpdateFactory.newCameraPosition(cpNew);// aMap.moveCamera(cu);
mRouteSearch = new RouteSearch(this);// 初始化routeSearch 对象mRouteSearch.setRouteSearchListener(this);// 设置数据回调监听器LatLonPoint start = new LatLonPoint(30.577082, 114.33167);// 起点114.331662,30.577063物电学院//坐标拾取的坐标反了// 为安师大新校区的经纬度31.286389,// 118.378039LatLonPoint end = new LatLonPoint(30.57836, 114.334886);// 终点114.334886,30.57836图书馆// 为皖南医学院的经纬度31.288702,// 118.360532fromAndTo = new RouteSearch.FromAndTo(start, end);// 实例化FromAndTo,字面意思,哪到哪setVolumeControlStream(AudioManager.STREAM_MUSIC);// 设置声音控制// 设置语音模块播报mAmapNavi = AMapNavi.getInstance(this);// 初始化导航引擎mRouteDistanceView = (TextView) findViewById(R.id.navi_route_distance_1);mRouteTimeView = (TextView) findViewById(R.id.navi_route_time_1);mRouteCostView = (TextView) findViewById(R.id.navi_route_cost_1);        routeOverLay = new RouteOverLay(aMap, null);TTSController ttsManager = TTSController.getInstance(this);// 初始化语音模块
        ttsManager.init();AMapNavi.getInstance(this).setAMapNaviListener(ttsManager);// 设置语音模块播报mGPSMarker = aMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.location_marker))));/* 显示App icon左侧的back键 */ActionBar actionBar = getActionBar();actionBar.setDisplayHomeAsUpEnabled(true);}public void doClick(View view) {switch (view.getId()) {case R.id.btn_bus:RouteSearch.BusRouteQuery busRouteQuery = new RouteSearch.BusRouteQuery(fromAndTo, RouteSearch.BusDefault, "武汉", 0);// 第一个参数表示路径规划的起点和终点,第二个参数表示公交查询模式,第三个参数表示公交查询城市区号,第四个参数表示是否计算夜班车,0表示不计算
            mRouteSearch.calculateBusRouteAsyn(busRouteQuery);break;case R.id.btn_car:RouteSearch.DriveRouteQuery driveRouteQuery = new RouteSearch.DriveRouteQuery(fromAndTo, RouteSearch.DrivingDefault, null, null, "");mRouteSearch.calculateDriveRouteAsyn(driveRouteQuery);aMap.clear();// 清除地图上的标注之类//驾车点List<NaviLatLng> mEndPoints = new ArrayList<NaviLatLng>();//114.332926,30.576153List<NaviLatLng> mWayPoints = new ArrayList<NaviLatLng>();mWayPoints.add(new NaviLatLng((mStartPoint.getLatitude()+30.576153)/2, (mStartPoint.getLongitude()+114.332926)/2));mEndPoints.add(new NaviLatLng(30.57836, 114.334886));mAmapNavi.calculateDriveRoute(mStartPoints, mEndPoints,mWayPoints, AMapNavi.DrivingDefault);//            initNavi();break;case R.id.btn_walk:RouteSearch.WalkRouteQuery walkRouteQuery = new RouteSearch.WalkRouteQuery(fromAndTo, RouteSearch.WalkDefault);mRouteSearch.calculateWalkRouteAsyn(walkRouteQuery);aMap.clear();// 清除地图上的标注之类NaviLatLng start = new NaviLatLng(mStartPoint.getLatitude(),mStartPoint.getLongitude());NaviLatLng end = new NaviLatLng(30.57836, 114.334886);// 114.339726,30.573219
            mAmapNavi.calculateWalkRoute(start, end);//            initNavi();break;case R.id.btn_beginNavigation://导航Intent standIntent = new Intent(MainActivity.this,NaviCustomActivity.class);standIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
//            initNavi();
            startActivity(standIntent);            break;}}// 顶部返回键
    @Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case android.R.id.home:finish();return true;default:return super.onOptionsItemSelected(item);}}/*** 初始化路线描述信息和加载线路*/private void initNavi() {// NaviLatLng start = new NaviLatLng(30.577082, 114.33167);//114.33246,30.57548嘉会园
//        NaviLatLng start = new NaviLatLng(mStartPoint.getLatitude(),mStartPoint.getLongitude());
//        NaviLatLng end = new NaviLatLng(30.57836, 114.334886);// 114.339726,30.573219
//        mAmapNavi.calculateWalkRoute(start, end);
//        //驾车点
//        List<NaviLatLng> mEndPoints = new ArrayList<NaviLatLng>();
//        //114.332926,30.576153
//        List<NaviLatLng> mWayPoints = new ArrayList<NaviLatLng>();
//        mWayPoints.add(new NaviLatLng((mStartPoint.getLatitude()+30.576153)/2, (mStartPoint.getLongitude()+114.332926)/2));
//        mEndPoints.add(new NaviLatLng(30.57836, 114.334886));
//        mAmapNavi.calculateDriveRoute(mStartPoints, mEndPoints,mWayPoints, AMapNavi.DrivingDefault);
        mAmapNavi.startGPS();TTSController.getInstance(this).startSpeaking();mAmapNavi = AMapNavi.getInstance(this);AMapNaviPath naviPath = mAmapNavi.getNaviPath();if (naviPath == null) {return;}// 获取路径规划线路,显示到地图上
        routeOverLay.setRouteInfo(naviPath);routeOverLay.addToMap();
//        if (mIsMapLoaded) {
//            routeOverLay.zoomToSpan();
//        }
        routeOverLay.zoomToSpan();double length = ((int) (naviPath.getAllLength() / (double) 1000 * 10))/ (double) 10;// 不足分钟 按分钟计int time = (naviPath.getAllTime() + 59) / 60;int cost = naviPath.getTollCost();mRouteDistanceView.setText(String.valueOf(length));mRouteTimeView.setText(String.valueOf(time));mRouteCostView.setText(String.valueOf(cost));}@Overrideprotected void onDestroy() {super.onDestroy();// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.onDestroy();}@Overrideprotected void onResume() {super.onResume();// 在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理
        mMapView.onResume();
//        initNavi();// 以下两句逻辑是为了保证进入首页开启定位和加入导航回调AMapNavi.getInstance(this).setAMapNaviListener(getAMapNaviListener());
//        NaviLatLng start = new NaviLatLng(30.577082, 114.33167);//114.33246,30.57548嘉会园
        NaviLatLng start = new NaviLatLng(location.getLatitude(), location.getLongitude());
//        NaviLatLng end = new NaviLatLng(30.57836, 114.334886);//114.339726,30.573219
//        mAmapNavi.calculateWalkRoute(start,end);
//        mAmapNavi.startGPS();
//        TTSController.getInstance(this).startSpeaking();
    }@Overrideprotected void onPause() {super.onPause();deactivate();// 在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理
        mMapView.onPause();// 下边逻辑是移除监听AMapNavi.getInstance(this).removeAMapNaviListener(getAMapNaviListener());}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);// 在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState// (outState),实现地图生命周期管理
        mMapView.onSaveInstanceState(outState);}@Overridepublic void onLocationChanged(AMapLocation amapLocation) {// TODO Auto-generated method stubif (mListener != null && amapLocation != null) {if (amapLocation != null && amapLocation.getErrorCode() == 0) {mLocationErrText.setVisibility(View.GONE);mStartPoint=new NaviLatLng(amapLocation.getLatitude(), amapLocation.getLongitude());mListener.onLocationChanged(amapLocation);// 显示系统小蓝点
                mGPSMarker.setPosition(new LatLng(mStartPoint.getLatitude(),mStartPoint.getLongitude()));mStartPoints.clear();mStartPoints.add(mStartPoint);} else {String errText = "定位失败," + amapLocation.getErrorCode();// + ": "// +// amapLocation.getErrorInfo()Log.e("AmapErr", errText);mLocationErrText.setVisibility(View.VISIBLE);mLocationErrText.setText(errText);}}}@Overridepublic void activate(OnLocationChangedListener onLocationChangedListener) {// TODO Auto-generated method stubmListener = onLocationChangedListener;if (locationClient == null) {locationClient = new AMapLocationClient(this.getApplicationContext());locationOption = new AMapLocationClientOption();locationClient.setLocationListener(this);// 设置定位监听
//            locationOption.setOnceLocation(true);// 设置为单次定位locationOption.setLocationMode(AMapLocationMode.Hight_Accuracy); // 设置定位模式为低功耗模式locationClient.setLocationOption(locationOption); // 设置定位参数locationClient.startLocation(); // 启动定位
        }}@Overridepublic void deactivate() {// TODO Auto-generated method stubmListener = null;if (locationClient != null) {locationClient.stopLocation();locationClient.onDestroy();}locationClient = null;locationOption = null;}@Overridepublic void onBusRouteSearched(BusRouteResult busRouteResult, int arg1) {// TODO Auto-generated method stubBusPath busPath = busRouteResult.getPaths().get(0);// 取其中一个路线
        aMap.clear();BusRouteOverlay routeOverlay = new BusRouteOverlay(this, aMap, busPath,busRouteResult.getStartPos(), busRouteResult.getTargetPos());routeOverlay.removeFromMap();routeOverlay.addToMap();routeOverlay.zoomToSpan();}@Overridepublic void onDriveRouteSearched(DriveRouteResult driveRouteResult,int rCode) {// TODO Auto-generated method stubif (rCode == 1000) {//注释的代码是路线规划用的,不能显示在导航界面,如果不注释在路线规划的时候会有两天线路
//            DrivePath drivePath = driveRouteResult.getPaths().get(0);
//            aMap.clear();
//            DrivingRouteOverlay routeOverlay = new DrivingRouteOverlay(this,
//                    aMap, drivePath, driveRouteResult.getStartPos(),
//                    driveRouteResult.getTargetPos());
//            routeOverlay.removeFromMap();
//            routeOverlay.addToMap();
//            routeOverlay.zoomToSpan();
            initNavi();}}@Overridepublic void onWalkRouteSearched(WalkRouteResult walkRouteResult, int rCode) {// TODO Auto-generated method stubif (rCode == 1000) {if (walkRouteResult != null && walkRouteResult.getPaths() != null&& walkRouteResult.getPaths().size() > 0) {//注释的代码是路线规划用的,不能显示在导航界面,如果不注释在路线规划的时候会有两天线路
//                WalkPath walkPath = walkRouteResult.getPaths().get(0);// 取其中一个路线
//                aMap.clear();// 清除地图上的标注之类
//                WalkRouteOverlay routeOverlay = new WalkRouteOverlay(this,
//                        aMap, walkPath, walkRouteResult.getStartPos(),
//                        walkRouteResult.getTargetPos());
//                routeOverlay.removeFromMap();
//                routeOverlay.addToMap();
//                routeOverlay.zoomToSpan();
                initNavi();} else {showToast("对不起,没有搜索到相关数据!");}} else if (rCode == 1102) {showToast("搜索失败,请检查网络连接!");} else if (rCode == 1002) {showToast("key验证无效!");} else {showToast("未知错误,请稍后重试!错误码为" + rCode);}//        mIsGetGPS=false;
        }/*** toast封装* * @param str*/private void showToast(String str) {Toast.makeText(this, str, Toast.LENGTH_SHORT).show();}@Overridepublic void onMapLoaded() {// TODO Auto-generated method stubmIsMapLoaded = true;if (routeOverLay != null) {routeOverLay.zoomToSpan();}}/*** 导航回调函数* * @return*/private AMapNaviListener getAMapNaviListener() {if (mAmapNaviListener == null) {mAmapNaviListener = new AMapNaviListener() {@Overridepublic void onTrafficStatusUpdate() {// TODO Auto-generated method stub
}@Overridepublic void onStartNavi(int arg0) {// TODO Auto-generated method stub
}@Overridepublic void onReCalculateRouteForYaw() {// TODO Auto-generated method stub
}@Overridepublic void onReCalculateRouteForTrafficJam() {// TODO Auto-generated method stub
}@Overridepublic void onLocationChange(AMapNaviLocation location) {}@Overridepublic void onInitNaviSuccess() {// TODO Auto-generated method stub
}@Overridepublic void onInitNaviFailure() {// TODO Auto-generated method stub
}@Overridepublic void onGetNavigationText(int arg0, String arg1) {// TODO Auto-generated method stub
}@Overridepublic void onEndEmulatorNavi() {// TODO Auto-generated method stub
}@Overridepublic void onCalculateRouteSuccess() {dissmissProgressDialog();switch (mNaviMethod) {//路径规划case R.id.btn_beginNavigation:Intent standIntent = new Intent(MainActivity.this,NaviRouteActivity.class);// standIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                        startActivity(standIntent);break;
//                    //模拟导航
//                    case NAVI_METHOD:
//                        Intent standIntent = new Intent(MainActivity.this,
//                                NaviCustomActivity.class);
//                        standIntent
//                                .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
//                        startActivity(standIntent);
//                        break;
                    }}@Overridepublic void onCalculateRouteFailure(int arg0) {dissmissProgressDialog();showToast("路径规划出错");}@Overridepublic void onArrivedWayPoint(int arg0) {// TODO Auto-generated method stub
}@Overridepublic void onArriveDestination() {// TODO Auto-generated method stub
}@Overridepublic void onGpsOpenStatus(boolean arg0) {// TODO Auto-generated method stub
}@Overridepublic void onNaviInfoUpdated(AMapNaviInfo arg0) {// TODO Auto-generated method stub
                    }@Overridepublic void onNaviInfoUpdate(NaviInfo arg0) {// TODO Auto-generated method stub
                    }@Override@Deprecatedpublic void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo arg0) {// TODO Auto-generated method stub
                    }@Override@Deprecatedpublic void OnUpdateTrafficFacility(TrafficFacilityInfo arg0) {// TODO Auto-generated method stub
                    }@Overridepublic void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] arg0) {// TODO Auto-generated method stub
                    }@Overridepublic void hideCross() {// TODO Auto-generated method stub
                    }@Overridepublic void hideLaneInfo() {// TODO Auto-generated method stub
                    }@Overridepublic void notifyParallelRoad(int arg0) {// TODO Auto-generated method stub
                    }@Overridepublic void onCalculateMultipleRoutesSuccess(int[] arg0) {// TODO Auto-generated method stub
                    }@Overridepublic void showCross(AMapNaviCross arg0) {// TODO Auto-generated method stub
                    }@Overridepublic void showLaneInfo(AMapLaneInfo[] arg0, byte[] arg1,byte[] arg2) {// TODO Auto-generated method stub
                    }@Overridepublic void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo arg0) {// TODO Auto-generated method stub
                    }@Overridepublic void updateAimlessModeStatistics(AimLessModeStat arg0) {// TODO Auto-generated method stub
                    }};}return mAmapNaviListener;}/*** 隐藏进度框*/private void dissmissProgressDialog() {if (mProgressDialog != null) {mProgressDialog.dismiss();}}@Overridepublic void onLockMap(boolean arg0) {// TODO Auto-generated method stub
        }@Overridepublic boolean onNaviBackClick() {// TODO Auto-generated method stubreturn false;}@Overridepublic void onNaviCancel() {// TODO Auto-generated method stub
        }@Overridepublic void onNaviMapMode(int arg0) {// TODO Auto-generated method stub
        }@Overridepublic void onNaviSetting() {// TODO Auto-generated method stub
        }@Overridepublic void onNaviTurnClick() {// TODO Auto-generated method stub
        }@Overridepublic void onNaviViewLoaded() {// TODO Auto-generated method stub
        }@Overridepublic void onNextRoadClick() {// TODO Auto-generated method stub
        }@Overridepublic void onScanViewButtonClick() {// TODO Auto-generated method stub
        }}

View Code

3.这个类其实没用到,参照别人的把这个也加进来了,MainActivity跳转dao此页面的实际在我的工程中没有工作

activity_route.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/grey"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/border" ><ImageViewandroid:id="@+id/route_back_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="@dimen/margin_bottom"android:layout_marginTop="@dimen/margin_top"android:src="@drawable/back_top" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="@dimen/margin_bottom"android:layout_marginTop="@dimen/margin_top"android:layout_weight="1"android:gravity="center_horizontal"android:text="@string/routeshow"android:textColor="@color/black"android:textSize="@dimen/titletext_size" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/border" ><com.amap.api.maps.MapViewandroid:id="@+id/routemap"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:paddingBottom="@dimen/margin_bottom"android:paddingLeft="@dimen/margin_left"android:paddingTop="@dimen/margin_top"android:text="@string/routeinfo_1"android:textColor="@color/black"android:textSize="@dimen/route_text_size" /><TextViewandroid:id="@+id/navi_route_distance"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:paddingBottom="@dimen/margin_bottom"android:paddingLeft="@dimen/margin_left"android:paddingTop="@dimen/margin_top"android:text="@string/routeinfo_default"android:textColor="@color/red"android:textSize="@dimen/route_text_size" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:paddingBottom="@dimen/margin_bottom"android:paddingTop="@dimen/margin_top"android:text="@string/routeinfo_2"android:textColor="@color/black"android:textSize="@dimen/route_text_size" /><TextViewandroid:id="@+id/navi_route_time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:paddingBottom="@dimen/margin_bottom"android:paddingLeft="@dimen/margin_left"android:paddingTop="@dimen/margin_top"android:text="@string/routeinfo_default"android:textColor="@color/red"android:textSize="@dimen/route_text_size" /><TextViewandroid:id="@+id/navi_route_cost_before"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:paddingBottom="@dimen/margin_bottom"android:paddingTop="@dimen/margin_top"android:text="@string/routeinfo_3"android:textColor="@color/black"android:textSize="@dimen/route_text_size" /><TextViewandroid:id="@+id/navi_route_cost"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:paddingBottom="@dimen/margin_bottom"android:paddingLeft="@dimen/margin_left"android:paddingTop="@dimen/margin_top"android:text="@string/routeinfo_default"android:textColor="@color/red"android:singleLine="true"android:textSize="@dimen/route_text_size" /><TextViewandroid:id="@+id/navi_route_cost_after"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:paddingBottom="@dimen/margin_bottom"android:paddingTop="@dimen/margin_top"android:text="@string/routeinfo_4"android:textColor="@color/black"android:textSize="@dimen/route_text_size" /></LinearLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" ><Buttonandroid:id="@+id/routestartnavi"android:layout_width="wrap_content"android:layout_height="@dimen/naviroute_navi_height"android:layout_alignParentRight="true"android:text="@string/start_navi_navi" /><AutoCompleteTextViewandroid:id="@+id/navi_theme_text"android:layout_width="wrap_content"android:layout_height="@dimen/naviroute_navi_height"android:layout_alignParentLeft="true"android:layout_toLeftOf="@id/routestartnavi"android:focusable="false"android:hint="@string/theme_blue" ></AutoCompleteTextView><ImageViewandroid:id="@+id/navi_theme_image"android:layout_width="wrap_content"android:layout_height="@dimen/naviroute_navi_height"android:layout_alignBottom="@+id/navi_theme_text"android:layout_alignRight="@+id/navi_theme_text"android:layout_alignTop="@id/navi_theme_text"android:layout_marginRight="@dimen/margin_right"android:src="@drawable/downarrow" /></RelativeLayout></LinearLayout>

View Code

NaviRouteActivity.java

package com.example.bmap;import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.InputType;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.AMap.OnMapLoadedListener;
import com.amap.api.navi.AMapNavi;
import com.amap.api.navi.AMapNaviViewOptions;
import com.amap.api.navi.model.AMapNaviPath;
import com.amap.api.navi.view.RouteOverLay;/*** 路径规划结果展示界面*/
public class NaviRouteActivity extends Activity implements OnClickListener,OnMapLoadedListener {// Viewprivate Button mStartNaviButton;// 实时导航按钮private MapView mMapView;// 地图控件private AutoCompleteTextView mThemeText;// 选择导航界面的风格private ImageView mThemeImage;// 选择按钮private ImageView mRouteBackView;// 返回按钮private TextView mRouteDistanceView;// 距离显示控件private TextView mRouteTimeView;// 时间显示控件private TextView mRouteCostView;// 花费显示控件// 地图导航资源private AMap mAmap;private AMapNavi mAmapNavi;private RouteOverLay mRouteOverLay;// 主题数组private String mTheme[];private boolean mIsMapLoaded = false;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_route);initResources();initView(savedInstanceState);//MainApplication.getInstance().addActivity(this);
    }// -----------------------初始化----------------------------------/*** 初始化资源*/private void initResources() {Resources res = getResources();mTheme = new String[] { res.getString(R.string.theme_blue),res.getString(R.string.theme_pink),res.getString(R.string.theme_white) };}/*** 初始化控件*/private void initView(Bundle savedInstanceState) {mStartNaviButton = (Button) findViewById(R.id.routestartnavi);mRouteBackView = (ImageView) findViewById(R.id.route_back_view);mThemeText = (AutoCompleteTextView) findViewById(R.id.navi_theme_text);mThemeText.setInputType(InputType.TYPE_NULL);
//        ArrayAdapter<String> themeAdapter = new ArrayAdapter<String>(this,
//                R.layout.strategy_inputs, mTheme);
//        mThemeText.setAdapter(themeAdapter);
mThemeText.setDropDownBackgroundResource(R.drawable.whitedownborder);mThemeImage = (ImageView) findViewById(R.id.navi_theme_image);mRouteDistanceView = (TextView) findViewById(R.id.navi_route_distance);mRouteTimeView = (TextView) findViewById(R.id.navi_route_time);mRouteCostView = (TextView) findViewById(R.id.navi_route_cost);mMapView = (MapView) findViewById(R.id.routemap);mMapView.onCreate(savedInstanceState);mAmap = mMapView.getMap();mAmap.setOnMapLoadedListener(this);mThemeImage.setOnClickListener(this);mThemeText.setOnClickListener(this);mStartNaviButton.setOnClickListener(this);mRouteBackView.setOnClickListener(this);mRouteOverLay = new RouteOverLay(mAmap, null);}/*** 初始化路线描述信息和加载线路*/private void initNavi() {mAmapNavi = AMapNavi.getInstance(this);AMapNaviPath naviPath = mAmapNavi.getNaviPath();if (naviPath == null) {return;}// 获取路径规划线路,显示到地图上
        mRouteOverLay.setRouteInfo(naviPath);mRouteOverLay.addToMap();if (mIsMapLoaded) {mRouteOverLay.zoomToSpan();}double length = ((int) (naviPath.getAllLength() / (double) 1000 * 10))/ (double) 10;// 不足分钟 按分钟计int time = (naviPath.getAllTime() + 59) / 60;int cost = naviPath.getTollCost();mRouteDistanceView.setText(String.valueOf(length));mRouteTimeView.setText(String.valueOf(time));mRouteCostView.setText(String.valueOf(cost));}/*** 获取导航界面主题样式* * @param themeColor* @return*/private int getThemeStyle(String themeColor) {int theme = AMapNaviViewOptions.BLUE_COLOR_TOPIC;if (mTheme[0].equals(themeColor)) {theme = AMapNaviViewOptions.BLUE_COLOR_TOPIC;} else if (mTheme[1].equals(themeColor)) {theme = AMapNaviViewOptions.PINK_COLOR_TOPIC;} else if (mTheme[2].equals(themeColor)) {theme = AMapNaviViewOptions.WHITE_COLOR_TOPIC;}return theme;}// ------------------------------事件处理-----------------------------
    @Overridepublic void onClick(View v) {switch (v.getId()) {// 实时导航操作case R.id.routestartnavi:Bundle bundle = new Bundle();bundle.putInt("theme", getThemeStyle(mThemeText.getText().toString()));Intent routeIntent = new Intent(NaviRouteActivity.this,NaviCustomActivity.class);routeIntent.putExtras(bundle);startActivity(routeIntent);break;// 返回操作case R.id.route_back_view:Intent startIntent = new Intent(NaviRouteActivity.this,MainActivity.class);startIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);startActivity(startIntent);//MainApplication.getInstance().deleteActivity(this);
            finish();break;// 主题选择case R.id.navi_theme_image:case R.id.navi_theme_text:mThemeText.showDropDown();break;}}/*** * 返回键监听* */@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {Intent intent = new Intent(NaviRouteActivity.this,MainActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);startActivity(intent);//MainApplication.getInstance().deleteActivity(this);
            finish();}return super.onKeyDown(keyCode, event);}// ------------------------------生命周期必须重写方法---------------------------
    @Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mMapView.onSaveInstanceState(outState);}@Overridepublic void onResume() {super.onResume();mMapView.onResume();initNavi();}@Overridepublic void onPause() {super.onPause();mMapView.onPause();}@Overridepublic void onDestroy() {super.onDestroy();mMapView.onDestroy();}@Overridepublic void onMapLoaded() {mIsMapLoaded = true;if (mRouteOverLay != null) {mRouteOverLay.zoomToSpan();}}}

View Code

4.导航页面

fragment_navistander.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><com.amap.api.navi.AMapNaviViewandroid:id="@+id/navimap"android:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout>

View Code

NaviCustomActivity.java

package com.example.bmap;import util.TTSController;
import util.Utils;import com.amap.api.navi.AMapNavi;
import com.amap.api.navi.AMapNaviListener;
import com.amap.api.navi.AMapNaviView;
import com.amap.api.navi.AMapNaviViewListener;
import com.amap.api.navi.AMapNaviViewOptions;
import com.amap.api.navi.model.AMapLaneInfo;
import com.amap.api.navi.model.AMapNaviCross;
import com.amap.api.navi.model.AMapNaviInfo;
import com.amap.api.navi.model.AMapNaviLocation;
import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
import com.amap.api.navi.model.AimLessModeCongestionInfo;
import com.amap.api.navi.model.AimLessModeStat;
import com.amap.api.navi.model.NaviInfo;
import com.autonavi.tbt.TrafficFacilityInfo;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;public class NaviCustomActivity extends Activity implementsAMapNaviViewListener {private AMapNaviView mAmapAMapNaviView;// 导航可以设置的参数private boolean mDayNightFlag = Utils.DAY_MODE;// 默认为白天模式private boolean mDeviationFlag = Utils.YES_MODE;// 默认进行偏航重算private boolean mJamFlag = Utils.YES_MODE;// 默认进行拥堵重算private boolean mTrafficFlag = Utils.OPEN_MODE;// 默认进行交通播报private boolean mCameraFlag = Utils.OPEN_MODE;// 默认进行摄像头播报private boolean mScreenFlag = Utils.YES_MODE;// 默认是屏幕常亮// 导航界面风格private int mThemeStle;// 导航监听private AMapNaviListener mAmapNaviListener;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.fragment_navistander);//语音播报开始TTSController.getInstance(this).startSpeaking();// 实时导航方式进行导航,模拟导航时把此条语句注释掉AMapNavi.getInstance(this).startNavi(AMapNavi.GPSNaviMode);init(savedInstanceState);}/*** 初始化* * @param savedInstanceState*/private void init(Bundle savedInstanceState) {mAmapAMapNaviView = (AMapNaviView) findViewById(R.id.navimap);mAmapAMapNaviView.onCreate(savedInstanceState);// 设置导航界面监听mAmapAMapNaviView.setAMapNaviViewListener(this);setAmapNaviViewOptions();//        // 设置模拟速度
//        AMapNavi.getInstance(this).setEmulatorNaviSpeed(100);
//        // 开启模拟导航
//        AMapNavi.getInstance(this).startNavi(AMapNavi.EmulatorNaviMode);
    }    /*** 设置导航的参数*/private void setAmapNaviViewOptions() {if (mAmapAMapNaviView == null) {return;}AMapNaviViewOptions viewOptions = new AMapNaviViewOptions();viewOptions.setSettingMenuEnabled(true);// 设置导航setting可用viewOptions.setNaviNight(mDayNightFlag);// 设置导航是否为黑夜模式viewOptions.setReCalculateRouteForYaw(mDeviationFlag);// 设置导偏航是否重算viewOptions.setReCalculateRouteForTrafficJam(mJamFlag);// 设置交通拥挤是否重算viewOptions.setTrafficInfoUpdateEnabled(mTrafficFlag);// 设置是否更新路况viewOptions.setCameraInfoUpdateEnabled(mCameraFlag);// 设置摄像头播报viewOptions.setScreenAlwaysBright(mScreenFlag);// 设置屏幕常亮情况viewOptions.setNaviViewTopic(mThemeStle);// 设置导航界面主题样式
mAmapAMapNaviView.setViewOptions(viewOptions);}private AMapNaviListener getAMapNaviListener() {if (mAmapNaviListener == null) {mAmapNaviListener = new AMapNaviListener() {@Overridepublic void onTrafficStatusUpdate() {// TODO Auto-generated method stub
}@Overridepublic void onStartNavi(int arg0) {// TODO Auto-generated method stub
}@Overridepublic void onReCalculateRouteForYaw() {// 可以在频繁重算时进行设置,例如五次之后int i = 0;i++;if (i >= 5) {AMapNaviViewOptions viewOptions = new AMapNaviViewOptions();viewOptions.setReCalculateRouteForYaw(false);mAmapAMapNaviView.setViewOptions(viewOptions);}}@Overridepublic void onReCalculateRouteForTrafficJam() {}@Overridepublic void onLocationChange(AMapNaviLocation location) {}@Overridepublic void onInitNaviSuccess() {// TODO Auto-generated method stub
}@Overridepublic void onInitNaviFailure() {// TODO Auto-generated method stub
}@Overridepublic void onGetNavigationText(int arg0, String arg1) {// TODO Auto-generated method stub
}@Overridepublic void onEndEmulatorNavi() {// TODO Auto-generated method stub
}@Overridepublic void onCalculateRouteSuccess() {}@Overridepublic void onCalculateRouteFailure(int arg0) {}@Overridepublic void onArrivedWayPoint(int arg0) {// TODO Auto-generated method stub
}@Overridepublic void onArriveDestination() {// TODO Auto-generated method stub
}@Overridepublic void onGpsOpenStatus(boolean arg0) {// TODO Auto-generated method stub
}@Overridepublic void onNaviInfoUpdated(AMapNaviInfo arg0) {// TODO Auto-generated method stub
                    }@Overridepublic void onNaviInfoUpdate(NaviInfo arg0) {// TODO Auto-generated method stub
                    }@Override@Deprecatedpublic void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo arg0) {// TODO Auto-generated method stub
                    }@Override@Deprecatedpublic void OnUpdateTrafficFacility(TrafficFacilityInfo arg0) {// TODO Auto-generated method stub
                    }@Overridepublic void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] arg0) {// TODO Auto-generated method stub
                    }@Overridepublic void hideCross() {// TODO Auto-generated method stub
                    }@Overridepublic void hideLaneInfo() {// TODO Auto-generated method stub
                    }@Overridepublic void notifyParallelRoad(int arg0) {// TODO Auto-generated method stub
                    }@Overridepublic void onCalculateMultipleRoutesSuccess(int[] arg0) {// TODO Auto-generated method stub
                    }@Overridepublic void showCross(AMapNaviCross arg0) {// TODO Auto-generated method stub
                    }@Overridepublic void showLaneInfo(AMapLaneInfo[] arg0, byte[] arg1,byte[] arg2) {// TODO Auto-generated method stub
                    }@Overridepublic void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo arg0) {// TODO Auto-generated method stub
                    }@Overridepublic void updateAimlessModeStatistics(AimLessModeStat arg0) {// TODO Auto-generated method stub
                    }};}return mAmapNaviListener;}/*** 导航界面左下角返回按钮回调* */@Overridepublic void onNaviCancel() {Intent intent = new Intent(NaviCustomActivity.this,MainActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);startActivity(intent);finish();}/*** 导航界面右下角功能设置按钮回调* */@Overridepublic void onNaviSetting() {Bundle bundle = new Bundle();bundle.putInt(Utils.THEME, mThemeStle);bundle.putBoolean(Utils.DAY_NIGHT_MODE, mDayNightFlag);bundle.putBoolean(Utils.DEVIATION, mDeviationFlag);bundle.putBoolean(Utils.JAM, mJamFlag);bundle.putBoolean(Utils.TRAFFIC, mTrafficFlag);bundle.putBoolean(Utils.CAMERA, mCameraFlag);bundle.putBoolean(Utils.SCREEN, mScreenFlag);Intent intent = new Intent(NaviCustomActivity.this,NaviSettingActivity.class);intent.putExtras(bundle);startActivity(intent);}@Overridepublic void onNaviMapMode(int arg0) {// TODO Auto-generated method stub
}private void processBundle(Bundle bundle) {if (bundle != null) {mDayNightFlag = bundle.getBoolean(Utils.DAY_NIGHT_MODE,mDayNightFlag);mDeviationFlag = bundle.getBoolean(Utils.DEVIATION, mDeviationFlag);mJamFlag = bundle.getBoolean(Utils.JAM, mJamFlag);mTrafficFlag = bundle.getBoolean(Utils.TRAFFIC, mTrafficFlag);mCameraFlag = bundle.getBoolean(Utils.CAMERA, mCameraFlag);mScreenFlag = bundle.getBoolean(Utils.SCREEN, mScreenFlag);mThemeStle = bundle.getInt(Utils.THEME);}}@Overrideprotected void onNewIntent(Intent intent) {// TODO Auto-generated method stubsuper.onNewIntent(intent);setIntent(intent);}/*** 返回键盘监听* */@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {Intent intent = new Intent(NaviCustomActivity.this,MainActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);startActivity(intent);finish();}return super.onKeyDown(keyCode, event);}// ------------------------------生命周期方法---------------------------
    @Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mAmapAMapNaviView.onSaveInstanceState(outState);}@Overridepublic void onResume() {super.onResume();Bundle bundle = getIntent().getExtras();processBundle(bundle);setAmapNaviViewOptions();AMapNavi.getInstance(this).setAMapNaviListener(getAMapNaviListener());mAmapAMapNaviView.onResume();}@Overridepublic void onPause() {super.onPause();mAmapAMapNaviView.onPause();AMapNavi.getInstance(this).removeAMapNaviListener(getAMapNaviListener());}@Overridepublic void onDestroy() {super.onDestroy();mAmapAMapNaviView.onDestroy();//页面结束时,停止语音播报TTSController.getInstance(this).stopSpeaking();}@Overridepublic void onLockMap(boolean arg0) {// TODO Auto-generated method stub
        }@Overridepublic boolean onNaviBackClick() {// TODO Auto-generated method stubreturn false;}@Overridepublic void onNaviTurnClick() {// TODO Auto-generated method stub
        }@Overridepublic void onNaviViewLoaded() {// TODO Auto-generated method stub
        }@Overridepublic void onNextRoadClick() {// TODO Auto-generated method stub
        }@Overridepublic void onScanViewButtonClick() {// TODO Auto-generated method stub
        }}

View Code

5.导航设置界面

activity_navisetting.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/grey"android:orientation="vertical" ><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="@dimen/setting_margin_bottom" ><ImageViewandroid:id="@+id/setting_back_image"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/back_top" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_weight="1"android:gravity="center_horizontal"android:text="@string/setting"android:textColor="@color/black"android:textSize="@dimen/titletext_size" /></RelativeLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="@dimen/setting_margin_bottom"android:layout_marginLeft="@dimen/navibar_margin_left"android:layout_marginRight="@dimen/navibar_margin_right"android:layout_marginTop="@dimen/setting_margin_top"android:layout_weight="1"android:gravity="center_vertical"android:background="@drawable/whiteborder" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/margin_left"android:layout_marginTop="10dp"android:gravity="center_vertical"android:text="@string/daynightmode"android:textColor="@color/black"android:textSize="@dimen/navisetting_subtext_size" /><RadioGroupandroid:id="@+id/day_night_group"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginRight="@dimen/margin_right"android:orientation="horizontal" ><RadioButtonandroid:id="@+id/dayratio"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="@dimen/margin_right"android:checked="true"android:text="@string/day"android:textColor="@color/black" /><RadioButtonandroid:id="@+id/nightradio"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/night"android:textColor="@color/black" /></RadioGroup></RelativeLayout><RelativeLayoutandroid:layout_weight="1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="@dimen/setting_margin_bottom"android:layout_marginLeft="@dimen/navibar_margin_left"android:layout_marginRight="@dimen/navibar_margin_right"android:layout_marginTop="@dimen/setting_margin_top"android:gravity="center_vertical"android:background="@drawable/whiteborder" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/margin_left"android:layout_marginTop="10dp"android:text="@string/deviationrecalculation"android:textColor="@color/black"android:textSize="@dimen/navisetting_subtext_size" /><RadioGroupandroid:id="@+id/deviation_group"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginRight="@dimen/margin_right"android:orientation="horizontal" ><RadioButtonandroid:id="@+id/deviationyesradio"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="@dimen/margin_right"android:checked="true"android:text="@string/yes"android:textColor="@color/black" /><RadioButtonandroid:id="@+id/deviationnoradio"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/no"android:textColor="@color/black" /></RadioGroup></RelativeLayout><RelativeLayoutandroid:layout_weight="1"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_vertical"android:layout_marginBottom="@dimen/setting_margin_bottom"android:layout_marginLeft="@dimen/navibar_margin_left"android:layout_marginRight="@dimen/navibar_margin_right"android:layout_marginTop="@dimen/setting_margin_top"android:background="@drawable/whiteborder" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/margin_left"android:layout_marginTop="10dp"android:text="@string/jamrecalculation"android:textColor="@color/black"android:textSize="@dimen/navisetting_subtext_size" /><RadioGroupandroid:id="@+id/jam_group"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginRight="@dimen/margin_right"android:orientation="horizontal" ><RadioButtonandroid:id="@+id/jam_yes_radio"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="@dimen/margin_right"android:checked="true"android:text="@string/yes"android:textColor="@color/black" /><RadioButtonandroid:id="@+id/jam_no_radio"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/no"android:textColor="@color/black" /></RadioGroup></RelativeLayout><RelativeLayoutandroid:layout_weight="1"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_vertical"android:layout_marginBottom="@dimen/setting_margin_bottom"android:layout_marginLeft="@dimen/navibar_margin_left"android:layout_marginRight="@dimen/navibar_margin_right"android:layout_marginTop="@dimen/setting_margin_top"android:background="@drawable/whiteborder" ><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/margin_left"android:layout_marginTop="10dp"android:text="@string/trafficbroadcast"android:textColor="@color/black"android:textSize="@dimen/navisetting_subtext_size" /><RadioGroupandroid:id="@+id/traffic_group"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginRight="@dimen/margin_right"android:orientation="horizontal" ><RadioButtonandroid:id="@+id/trafficyesradio"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="@dimen/margin_right"android:checked="true"android:text="@string/open"android:textColor="@color/black" /><RadioButtonandroid:id="@+id/trafficnoradio"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/close"android:textColor="@color/black" /></RadioGroup></RelativeLayout><RelativeLayoutandroid:layout_weight="1"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_vertical"android:layout_marginBottom="@dimen/setting_margin_bottom"android:layout_marginLeft="@dimen/navibar_margin_left"android:layout_marginRight="@dimen/navibar_margin_right"android:layout_marginTop="@dimen/setting_margin_top"android:background="@drawable/whiteborder" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/margin_left"android:layout_marginTop="10dp"android:text="@string/camerabroadcast"android:textColor="@color/black"android:textSize="@dimen/navisetting_subtext_size" /><RadioGroupandroid:id="@+id/camera_group"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginRight="@dimen/margin_right"android:orientation="horizontal" ><RadioButtonandroid:id="@+id/camerayesradio"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="@dimen/margin_right"android:checked="true"android:text="@string/open"android:textColor="@color/black" /><RadioButtonandroid:id="@+id/cameranoradio"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/close"android:textColor="@color/black" /></RadioGroup></RelativeLayout><RelativeLayoutandroid:layout_weight="1"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_vertical"android:layout_marginBottom="@dimen/setting_margin_bottom"android:layout_marginLeft="@dimen/navibar_margin_left"android:layout_marginRight="@dimen/navibar_margin_right"android:layout_marginTop="@dimen/setting_margin_top"android:background="@drawable/whiteborder" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/margin_left"android:layout_marginTop="10dp"android:text="@string/screenon"android:textColor="@color/black"android:textSize="@dimen/navisetting_subtext_size" /><RadioGroupandroid:id="@+id/screen_group"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginRight="@dimen/margin_right"android:orientation="horizontal" ><RadioButtonandroid:id="@+id/screenonradio"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="@dimen/margin_right"android:checked="true"android:text="@string/yes"android:textColor="@color/black" /><RadioButtonandroid:id="@+id/screenoffradio"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/no"android:textColor="@color/black" /></RadioGroup></RelativeLayout></LinearLayout>

View Code

NaviSettingActivity.java

package com.example.bmap;import util.Utils;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;import com.amap.api.navi.AMapNaviViewOptions;/*** 导航设置界面**/
public class NaviSettingActivity extends Activity implements OnClickListener,OnCheckedChangeListener {// ----------------Viewprivate ImageView mBackView;//返回按钮private RadioGroup mDayNightGroup;//黑夜模式白天模式private RadioGroup mDeviationGroup;//偏航重算private RadioGroup mJamGroup;//拥堵重算private RadioGroup mTrafficGroup;//交通播报private RadioGroup mCameraGroup;//摄像头播报private RadioGroup mScreenGroup;//屏幕常亮private boolean mDayNightFlag = Utils.DAY_MODE;private boolean mDeviationFlag = Utils.YES_MODE;private boolean mJamFlag = Utils.YES_MODE;private boolean mTrafficFlag = Utils.OPEN_MODE;private boolean mCameraFlag = Utils.OPEN_MODE;private boolean mScreenFlag = Utils.YES_MODE;private int mThemeStyle;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_navisetting);Bundle bundle=getIntent().getExtras();processBundle(bundle);initView();initListener();}/*** 初始化控件*/private void initView() {mBackView = (ImageView) findViewById(R.id.setting_back_image);mDayNightGroup = (RadioGroup) findViewById(R.id.day_night_group);mDeviationGroup = (RadioGroup) findViewById(R.id.deviation_group);mJamGroup = (RadioGroup) findViewById(R.id.jam_group);mTrafficGroup = (RadioGroup) findViewById(R.id.traffic_group);mCameraGroup = (RadioGroup) findViewById(R.id.camera_group);mScreenGroup = (RadioGroup) findViewById(R.id.screen_group);}/*** 初始化监听事件*/private void initListener() {mBackView.setOnClickListener(this);mDayNightGroup.setOnCheckedChangeListener(this);mDeviationGroup.setOnCheckedChangeListener(this);mJamGroup.setOnCheckedChangeListener(this);mTrafficGroup.setOnCheckedChangeListener(this);mCameraGroup.setOnCheckedChangeListener(this);mScreenGroup.setOnCheckedChangeListener(this);}/*** 根据导航界面传过来的数据设置当前界面的显示状态*/private void setViewContent() {if (mDayNightGroup == null) {return;}if (mDayNightFlag) {mDayNightGroup.check(R.id.nightradio);} else {mDayNightGroup.check(R.id.dayratio);}if (mDeviationFlag) {mDeviationGroup.check(R.id.deviationyesradio);} else {mDeviationGroup.check(R.id.deviationnoradio);}if (mJamFlag) {mJamGroup.check(R.id.jam_yes_radio);} else {mJamGroup.check(R.id.jam_no_radio);}if (mTrafficFlag) {mTrafficGroup.check(R.id.trafficyesradio);} else {mTrafficGroup.check(R.id.trafficnoradio);}if (mCameraFlag) {mCameraGroup.check(R.id.camerayesradio);} else {mCameraGroup.check(R.id.cameranoradio);}if (mScreenFlag) {mScreenGroup.check(R.id.screenonradio);} else {mScreenGroup.check(R.id.screenoffradio);}}/*** 处理具体的bundle* @param bundle*/private void processBundle(Bundle bundle) {if (bundle != null) {mThemeStyle = bundle.getInt(Utils.THEME,AMapNaviViewOptions.DEFAULT_COLOR_TOPIC);mDayNightFlag = bundle.getBoolean(Utils.DAY_NIGHT_MODE);mDeviationFlag = bundle.getBoolean(Utils.DEVIATION);mJamFlag = bundle.getBoolean(Utils.JAM);mTrafficFlag = bundle.getBoolean(Utils.TRAFFIC);mCameraFlag = bundle.getBoolean(Utils.CAMERA);mScreenFlag = bundle.getBoolean(Utils.SCREEN);}}/*** 根据当前界面的设置设置,构建bundle* @return*/private Bundle getBundle() {Bundle bundle = new Bundle();bundle.putBoolean(Utils.DAY_NIGHT_MODE, mDayNightFlag);bundle.putBoolean(Utils.DEVIATION, mDeviationFlag);bundle.putBoolean(Utils.JAM, mJamFlag);bundle.putBoolean(Utils.TRAFFIC, mTrafficFlag);bundle.putBoolean(Utils.CAMERA, mCameraFlag);bundle.putBoolean(Utils.SCREEN, mScreenFlag);bundle.putInt(Utils.THEME, mThemeStyle);return bundle;}// 事件处理方法
    @Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.setting_back_image:Intent intent = new Intent(NaviSettingActivity.this,NaviCustomActivity.class);intent.putExtras(getBundle());intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);startActivity(intent);finish();break;}}/*** 返回键监听* */@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {Intent intent = new Intent(NaviSettingActivity.this,NaviCustomActivity.class);intent.putExtras(getBundle());intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);startActivity(intent);finish();}return super.onKeyDown(keyCode, event);}// ------------------------------生命周期重写方法---------------------------
@Overridepublic void onResume() {// TODO Auto-generated method stubsuper.onResume();setViewContent();}@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {switch (checkedId) {// 昼夜模式case R.id.dayratio:mDayNightFlag = Utils.DAY_MODE;break;case R.id.nightradio:mDayNightFlag = Utils.NIGHT_MODE;break;// 偏航重算case R.id.deviationyesradio:mDeviationFlag = Utils.YES_MODE;break;case R.id.deviationnoradio:mDeviationFlag = Utils.NO_MODE;break;// 拥堵重算case R.id.jam_yes_radio:mJamFlag = Utils.YES_MODE;break;case R.id.jam_no_radio:mJamFlag = Utils.NO_MODE;break;// 交通播报case R.id.trafficyesradio:mTrafficFlag = Utils.OPEN_MODE;break;case R.id.trafficnoradio:mTrafficFlag = Utils.CLOSE_MODE;break;// 摄像头播报case R.id.camerayesradio:mCameraFlag = Utils.OPEN_MODE;break;case R.id.cameranoradio:mCameraFlag = Utils.CLOSE_MODE;break;// 屏幕常亮case R.id.screenonradio:mScreenFlag = Utils.YES_MODE;break;case R.id.screenoffradio:mScreenFlag = Utils.NO_MODE;break;}}
}

View Code

由于模拟器无法实现导航,我这里就没有录屏,直接截几个界面图

主要参考博客:http://www.cnblogs.com/ouyangduoduo/p/4623680.html

以及高德官网

转载于:https://www.cnblogs.com/rainday1/p/5550857.html

高德地图线路规划+导航相关推荐

  1. uniapp使用高德地图线路规划

    地图终于实现了想要的功能 准备 高德地图提供了线路规划的接口,但是由于uniapp使用的是小程序的SDK,有些东西就会无法使用 参考文档 SDK里面的东西都是小程序中的语法,比如wx.getLocat ...

  2. uniapp 开发安卓App实现高德地图路线规划导航

    文章目录 技术概述 技术详述 问题与解决 我的总结 参考文献 技术概述 描述这个技术是做什么的/什么情况下会使用到这个技术,学习该技术的原因,技术的难点在哪里.控制在50-100字内. uniapp的 ...

  3. 高德地图线路规划的接入使用(步行-公交-驾车)

    参考文案:http://lbs.amap.com/api/android-sdk/guide/route-plan/drive/ 官方文档:http://a.amap.com/lbs/static/u ...

  4. android app调用第三方地图路线规划导航(百度,高德,腾讯)

    android app调用第三方地图路线规划导航(百度,高德,腾讯) 因为直接使用高德的sdk提供的导航被投诉说不准,所以需要接第三方. 把BAT系的地图都接上了,有兄弟找到其他的地图调用方法告诉下小 ...

  5. iOS 高德地图路线规划

    最近做了高德地图路线规划,把自己不熟的点记录一下: 1.地图不显示当前位置精准圈:设置mapview的 customizeUserLocationAccuracyCircleRepresentatio ...

  6. Android开发之高德API篇:2、高德API线路规划

    TIME:2020年7月6日 2.高德API线路规划----步行线路规划 前言: step1 工程配置 step2 整体实现过程 step3 具体实现过程 总结 附上源码 前言: 该篇博客主要是介绍高 ...

  7. 高德地图小程序步行路线显示_微信小程序 高德地图路线规划实现过程详解

    前言 最近项目中做到相关网约车小程序.需要使用到地图中的路线规划,对3种地图进行了分析.这里稍微做一下总结: 百度地图 百度坐标 (BD-09) 腾讯地图 火星坐标(GCJ-02) 高德地图 火星坐标 ...

  8. 高德地图安卓 拖拽选点_行车记录仪当“眼睛” 高德地图手机AR导航再次升级...

    来源标题:行车记录仪当"眼睛" 高德地图手机AR导航再次升级 高德地图近日发布新版本,AR驾车导航服务再次升级,支持连接车内行车记录仪.由行车记录仪的摄像头充当"眼睛&q ...

  9. 高德地图ar步行导航使用教程分享

    高德地图功能多,最近向用户展示了新功能--ar步行导航.很多小伙伴对这个功能还不太了解.所以换换为大家准备了详细的使用教程共享.一起看看吧! 高德地图ar步行导航使用教程 1.打开高德地图.选择下方& ...

最新文章

  1. 独家 | 115个A/B测试的分析结果︰平均提升为4%,大部分缺乏统计检定力
  2. 0基础学python-从0开始学Python,0基础小白
  3. 抗锯齿_最好的抗锯齿,画质保留提升帧数
  4. php维持登录,php怎么保持登录状态?
  5. 【译】 Diving Into The Ethereum VM Part 6 - How Solidity Events Are Implemented
  6. Excel中文字换行
  7. java writedouble_Java FSDataOutputStream.writeDouble方法代碼示例
  8. u-boot移植随笔:一些内存地址的研究(gd_t和bd_t结构体)
  9. 陶老师ESD、EMI、EMC讲座
  10. CSS选择器之基本选择器总结
  11. WiFi----Wireshark抓包及分析说明
  12. 数字图像处理第三版4.8.4例子GLPF高斯低通滤波器matlab程序
  13. 三星s9刷android9,三星S9港版安卓9rom系统线刷包:TGY-G9600ZHU5CSG8-刷机之家
  14. 北京亿阳信通Oracle笔试题
  15. 小米冲高端?差了几口气
  16. 建筑企业并购:人才整合的三大误区
  17. doc转docx文件会乱吗_Word中doc和docx,到底有什么区别
  18. Windows将鼠标单击转换为双击的原理
  19. 级数收敛、cesaro可和以及Abel可和的关系
  20. (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80

热门文章

  1. 温澜潮生jQuery学习笔记
  2. esp ghost引导_UEFI引导修复教程及工具
  3. macOS Ventura 13 正式版系统在线安装镜像
  4. 移植dropbear到开发板
  5. matlab fmincon函数格式,求助 fmincon 函数调用格式说明
  6. 微信云开发+vant weapp实现图片上传
  7. 13.56MHZ刷卡能用在金属外壳的解决办法
  8. pb管能用ppr热熔器吗_PB管能和PPR管热熔在一起吗? – 手机爱问
  9. 【AUTOSAR】【信息安全】CSM
  10. 稻盛和夫的《成功的真谛》