高德地图线路规划+导航
准备工作在以前一篇博客中写过了: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() { @Override public void onData(byte[] arg0) { } @Override public void onCompleted(SpeechError error) { if (error != null) { } } @Override public 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)); } @Override public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) { // TODO Auto-generated method stub } @Override public void onCompleted(SpeechError arg0) { // TODO Auto-generated method stub isfinish = true; } @Override public void onSpeakBegin() { // TODO Auto-generated method stub isfinish = false; } @Override public void onSpeakPaused() { // TODO Auto-generated method stub } @Override public void onSpeakProgress(int arg0, int arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onSpeakResumed() { // TODO Auto-generated method stub } public void destroy() { if (mSpeechSynthesizer != null) { mSpeechSynthesizer.stopSpeaking(); } } @Override public void onArriveDestination() { // TODO Auto-generated method stub this.playText("鍒拌揪鐩殑鍦�"); } @Override public void onArrivedWayPoint(int arg0) { // TODO Auto-generated method stub } @Override public void onCalculateRouteFailure(int arg0) { this.playText("璺緞璁$畻澶辫触锛岃妫�鏌ョ綉缁滄垨杈撳叆鍙傛暟"); } @Override public void onCalculateRouteSuccess() { String calculateResult = "璺緞璁$畻灏辩华"; this.playText(calculateResult); } @Override public void onEndEmulatorNavi() { this.playText("瀵艰埅缁撴潫"); } @Override public void onGetNavigationText(int arg0, String arg1) { // TODO Auto-generated method stub this.playText(arg1); } @Override public void onInitNaviFailure() { // TODO Auto-generated method stub } @Override public void onInitNaviSuccess() { // TODO Auto-generated method stub } @Override public void onLocationChange(AMapNaviLocation arg0) { // TODO Auto-generated method stub } @Override public void onReCalculateRouteForTrafficJam() { // TODO Auto-generated method stub this.playText("鍓嶆柟璺嚎鎷ュ牭锛岃矾绾块噸鏂拌鍒�"); } @Override public void onReCalculateRouteForYaw() { this.playText("鎮ㄥ凡鍋忚埅"); } @Override public void onStartNavi(int arg0) { // TODO Auto-generated method stub } @Override public void onTrafficStatusUpdate() { // TODO Auto-generated method stub } @Override public void onGpsOpenStatus(boolean arg0) { // TODO Auto-generated method stub } @Override public void onNaviInfoUpdated(AMapNaviInfo arg0) { // TODO Auto-generated method stub } @Override public void onNaviInfoUpdate(NaviInfo arg0) { // TODO Auto-generated method stub } @Override public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) { } @Override public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) { } @Override public void showCross(AMapNaviCross aMapNaviCross) { } @Override public void hideCross() { } @Override public void showLaneInfo(AMapLaneInfo[] aMapLaneInfos, byte[] bytes, byte[] bytes1) { } @Override public void hideLaneInfo() { } @Override public void onCalculateMultipleRoutesSuccess(int[] ints) { } @Override public void notifyParallelRoad(int i) { } @Override public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) { } @Override public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) { } @Override public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) { } }
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; }
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>
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>
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>
线路规划:
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-sdk android: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" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="com.amap.api.v2.apikey" android:value="d278999928c69d384aabcc4493c40e36"/> <!-- 定位需要的服务 --> <service android:name="com.amap.api.location.APSService" > </service> <activity android: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>
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" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/btn_bus" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="doClick" android:text="bus" /> <Button android:id="@+id/btn_car" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="doClick" android:text="car" /> <Button android:id="@+id/btn_walk" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="doClick" android:text="walk" /> <!-- <Button android: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.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="wrap_content"> </com.amap.api.maps.MapView> --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/border" > <com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> <TextView android:id="@+id/map_err" android:layout_width="match_parent" android:visibility="gone" android:layout_height="310dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView 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_1" android:textColor="@color/black" android:textSize="@dimen/route_text_size" /> <TextView android: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" /> <TextView 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_2" android:textColor="@color/black" android:textSize="@dimen/route_text_size" /> <TextView android: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" /> <TextView android: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" /> <TextView android: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" /> <TextView android: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> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android: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>
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;// 地图点击设置终点 @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.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) {// 初始化aMap aMap = 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.378039 LatLonPoint end = new LatLonPoint(30.57836, 114.334886);// 终点114.334886,30.57836图书馆 // 为皖南医学院的经纬度31.288702, // 118.360532 fromAndTo = 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.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); // 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; } } // 顶部返回键 @Override public 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)); } @Override protected void onDestroy() { super.onDestroy(); // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); } @Override protected 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(); } @Override protected void onPause() { super.onPause(); deactivate(); // 在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理 mMapView.onPause(); // 下边逻辑是移除监听 AMapNavi.getInstance(this).removeAMapNaviListener(getAMapNaviListener()); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // 在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState // (outState),实现地图生命周期管理 mMapView.onSaveInstanceState(outState); } @Override public void onLocationChanged(AMapLocation amapLocation) { // TODO Auto-generated method stub if (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); } } } @Override public void activate(OnLocationChangedListener onLocationChangedListener) { // TODO Auto-generated method stub mListener = 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(); // 启动定位 } } @Override public void deactivate() { // TODO Auto-generated method stub mListener = null; if (locationClient != null) { locationClient.stopLocation(); locationClient.onDestroy(); } locationClient = null; locationOption = null; } @Override public void onBusRouteSearched(BusRouteResult busRouteResult, int arg1) { // TODO Auto-generated method stub BusPath busPath = busRouteResult.getPaths().get(0);// 取其中一个路线 aMap.clear(); BusRouteOverlay routeOverlay = new BusRouteOverlay(this, aMap, busPath, busRouteResult.getStartPos(), busRouteResult.getTargetPos()); routeOverlay.removeFromMap(); routeOverlay.addToMap(); routeOverlay.zoomToSpan(); } @Override public void onDriveRouteSearched(DriveRouteResult driveRouteResult, int rCode) { // TODO Auto-generated method stub if (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(); } } @Override public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int rCode) { // TODO Auto-generated method stub if (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(); } @Override public void onMapLoaded() { // TODO Auto-generated method stub mIsMapLoaded = true; if (routeOverLay != null) { routeOverLay.zoomToSpan(); } } /** * 导航回调函数 * * @return */ private AMapNaviListener getAMapNaviListener() { if (mAmapNaviListener == null) { mAmapNaviListener = new AMapNaviListener() { @Override public void onTrafficStatusUpdate() { // TODO Auto-generated method stub } @Override public void onStartNavi(int arg0) { // TODO Auto-generated method stub } @Override public void onReCalculateRouteForYaw() { // TODO Auto-generated method stub } @Override public void onReCalculateRouteForTrafficJam() { // TODO Auto-generated method stub } @Override public void onLocationChange(AMapNaviLocation location) { } @Override public void onInitNaviSuccess() { // TODO Auto-generated method stub } @Override public void onInitNaviFailure() { // TODO Auto-generated method stub } @Override public void onGetNavigationText(int arg0, String arg1) { // TODO Auto-generated method stub } @Override public void onEndEmulatorNavi() { // TODO Auto-generated method stub } @Override public 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; } } @Override public void onCalculateRouteFailure(int arg0) { dissmissProgressDialog(); showToast("路径规划出错"); } @Override public void onArrivedWayPoint(int arg0) { // TODO Auto-generated method stub } @Override public void onArriveDestination() { // TODO Auto-generated method stub } @Override public void onGpsOpenStatus(boolean arg0) { // TODO Auto-generated method stub } @Override public void onNaviInfoUpdated(AMapNaviInfo arg0) { // TODO Auto-generated method stub } @Override public void onNaviInfoUpdate(NaviInfo arg0) { // TODO Auto-generated method stub } @Override @Deprecated public void OnUpdateTrafficFacility( AMapNaviTrafficFacilityInfo arg0) { // TODO Auto-generated method stub } @Override @Deprecated public void OnUpdateTrafficFacility(TrafficFacilityInfo arg0) { // TODO Auto-generated method stub } @Override public void OnUpdateTrafficFacility( AMapNaviTrafficFacilityInfo[] arg0) { // TODO Auto-generated method stub } @Override public void hideCross() { // TODO Auto-generated method stub } @Override public void hideLaneInfo() { // TODO Auto-generated method stub } @Override public void notifyParallelRoad(int arg0) { // TODO Auto-generated method stub } @Override public void onCalculateMultipleRoutesSuccess(int[] arg0) { // TODO Auto-generated method stub } @Override public void showCross(AMapNaviCross arg0) { // TODO Auto-generated method stub } @Override public void showLaneInfo(AMapLaneInfo[] arg0, byte[] arg1, byte[] arg2) { // TODO Auto-generated method stub } @Override public void updateAimlessModeCongestionInfo( AimLessModeCongestionInfo arg0) { // TODO Auto-generated method stub } @Override public void updateAimlessModeStatistics(AimLessModeStat arg0) { // TODO Auto-generated method stub } }; } return mAmapNaviListener; } /** * 隐藏进度框 */ private void dissmissProgressDialog() { if (mProgressDialog != null) { mProgressDialog.dismiss(); } } @Override public void onLockMap(boolean arg0) { // TODO Auto-generated method stub } @Override public boolean onNaviBackClick() { // TODO Auto-generated method stub return false; } @Override public void onNaviCancel() { // TODO Auto-generated method stub } @Override public void onNaviMapMode(int arg0) { // TODO Auto-generated method stub } @Override public void onNaviSetting() { // TODO Auto-generated method stub } @Override public void onNaviTurnClick() { // TODO Auto-generated method stub } @Override public void onNaviViewLoaded() { // TODO Auto-generated method stub } @Override public void onNextRoadClick() { // TODO Auto-generated method stub } @Override public void onScanViewButtonClick() { // TODO Auto-generated method stub } }
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" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/border" > <ImageView android: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" /> <TextView android: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> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/border" > <com.amap.api.maps.MapView android:id="@+id/routemap" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView 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_1" android:textColor="@color/black" android:textSize="@dimen/route_text_size" /> <TextView android: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" /> <TextView 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_2" android:textColor="@color/black" android:textSize="@dimen/route_text_size" /> <TextView android: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" /> <TextView android: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" /> <TextView android: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" /> <TextView android: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> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android: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" /> <AutoCompleteTextView android: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> <ImageView android: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>
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 { // View private 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; } // ------------------------------事件处理----------------------------- @Override public 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; } } /** * * 返回键监听 * */ @Override public 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); } // ------------------------------生命周期必须重写方法--------------------------- @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); } @Override public void onResume() { super.onResume(); mMapView.onResume(); initNavi(); } @Override public void onPause() { super.onPause(); mMapView.onPause(); } @Override public void onDestroy() { super.onDestroy(); mMapView.onDestroy(); } @Override public void onMapLoaded() { mIsMapLoaded = true; if (mRouteOverLay != null) { mRouteOverLay.zoomToSpan(); } } }
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.AMapNaviView android:id="@+id/navimap" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
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 implements AMapNaviViewListener { 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() { @Override public void onTrafficStatusUpdate() { // TODO Auto-generated method stub } @Override public void onStartNavi(int arg0) { // TODO Auto-generated method stub } @Override public void onReCalculateRouteForYaw() { // 可以在频繁重算时进行设置,例如五次之后 int i = 0; i++; if (i >= 5) { AMapNaviViewOptions viewOptions = new AMapNaviViewOptions(); viewOptions.setReCalculateRouteForYaw(false); mAmapAMapNaviView.setViewOptions(viewOptions); } } @Override public void onReCalculateRouteForTrafficJam() { } @Override public void onLocationChange(AMapNaviLocation location) { } @Override public void onInitNaviSuccess() { // TODO Auto-generated method stub } @Override public void onInitNaviFailure() { // TODO Auto-generated method stub } @Override public void onGetNavigationText(int arg0, String arg1) { // TODO Auto-generated method stub } @Override public void onEndEmulatorNavi() { // TODO Auto-generated method stub } @Override public void onCalculateRouteSuccess() { } @Override public void onCalculateRouteFailure(int arg0) { } @Override public void onArrivedWayPoint(int arg0) { // TODO Auto-generated method stub } @Override public void onArriveDestination() { // TODO Auto-generated method stub } @Override public void onGpsOpenStatus(boolean arg0) { // TODO Auto-generated method stub } @Override public void onNaviInfoUpdated(AMapNaviInfo arg0) { // TODO Auto-generated method stub } @Override public void onNaviInfoUpdate(NaviInfo arg0) { // TODO Auto-generated method stub } @Override @Deprecated public void OnUpdateTrafficFacility( AMapNaviTrafficFacilityInfo arg0) { // TODO Auto-generated method stub } @Override @Deprecated public void OnUpdateTrafficFacility(TrafficFacilityInfo arg0) { // TODO Auto-generated method stub } @Override public void OnUpdateTrafficFacility( AMapNaviTrafficFacilityInfo[] arg0) { // TODO Auto-generated method stub } @Override public void hideCross() { // TODO Auto-generated method stub } @Override public void hideLaneInfo() { // TODO Auto-generated method stub } @Override public void notifyParallelRoad(int arg0) { // TODO Auto-generated method stub } @Override public void onCalculateMultipleRoutesSuccess(int[] arg0) { // TODO Auto-generated method stub } @Override public void showCross(AMapNaviCross arg0) { // TODO Auto-generated method stub } @Override public void showLaneInfo(AMapLaneInfo[] arg0, byte[] arg1, byte[] arg2) { // TODO Auto-generated method stub } @Override public void updateAimlessModeCongestionInfo( AimLessModeCongestionInfo arg0) { // TODO Auto-generated method stub } @Override public void updateAimlessModeStatistics(AimLessModeStat arg0) { // TODO Auto-generated method stub } }; } return mAmapNaviListener; } /** * 导航界面左下角返回按钮回调 * */ @Override public void onNaviCancel() { Intent intent = new Intent(NaviCustomActivity.this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); finish(); } /** * 导航界面右下角功能设置按钮回调 * */ @Override public 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); } @Override public 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); } } @Override protected void onNewIntent(Intent intent) { // TODO Auto-generated method stub super.onNewIntent(intent); setIntent(intent); } /** * 返回键盘监听 * */ @Override public 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); } // ------------------------------生命周期方法--------------------------- @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mAmapAMapNaviView.onSaveInstanceState(outState); } @Override public void onResume() { super.onResume(); Bundle bundle = getIntent().getExtras(); processBundle(bundle); setAmapNaviViewOptions(); AMapNavi.getInstance(this).setAMapNaviListener(getAMapNaviListener()); mAmapAMapNaviView.onResume(); } @Override public void onPause() { super.onPause(); mAmapAMapNaviView.onPause(); AMapNavi.getInstance(this).removeAMapNaviListener(getAMapNaviListener()); } @Override public void onDestroy() { super.onDestroy(); mAmapAMapNaviView.onDestroy(); //页面结束时,停止语音播报 TTSController.getInstance(this).stopSpeaking(); } @Override public void onLockMap(boolean arg0) { // TODO Auto-generated method stub } @Override public boolean onNaviBackClick() { // TODO Auto-generated method stub return false; } @Override public void onNaviTurnClick() { // TODO Auto-generated method stub } @Override public void onNaviViewLoaded() { // TODO Auto-generated method stub } @Override public void onNextRoadClick() { // TODO Auto-generated method stub } @Override public void onScanViewButtonClick() { // TODO Auto-generated method stub } }
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" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/setting_margin_bottom" > <ImageView android:id="@+id/setting_back_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/back_top" /> <TextView android: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> <RelativeLayout 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:layout_weight="1" android:gravity="center_vertical" android:background="@drawable/whiteborder" > <TextView android: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" /> <RadioGroup android: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" > <RadioButton android: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" /> <RadioButton android:id="@+id/nightradio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/night" android:textColor="@color/black" /> </RadioGroup> </RelativeLayout> <RelativeLayout android: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" > <TextView android: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" /> <RadioGroup android: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" > <RadioButton android: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" /> <RadioButton android:id="@+id/deviationnoradio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/no" android:textColor="@color/black" /> </RadioGroup> </RelativeLayout> <RelativeLayout android: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" > <TextView android: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" /> <RadioGroup android: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" > <RadioButton android: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" /> <RadioButton android: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> <RelativeLayout android: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" > <TextView android: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" /> <RadioGroup android: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" > <RadioButton android: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" /> <RadioButton android:id="@+id/trafficnoradio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/close" android:textColor="@color/black" /> </RadioGroup> </RelativeLayout> <RelativeLayout android: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" > <TextView android: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" /> <RadioGroup android: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" > <RadioButton android: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" /> <RadioButton android:id="@+id/cameranoradio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/close" android:textColor="@color/black" /> </RadioGroup> </RelativeLayout> <RelativeLayout android: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" > <TextView android: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" /> <RadioGroup android: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" > <RadioButton android: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" /> <RadioButton android:id="@+id/screenoffradio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/no" android:textColor="@color/black" /> </RadioGroup> </RelativeLayout> </LinearLayout>
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 { // ----------------View private 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; } // 事件处理方法 @Override public 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; } } /** * 返回键监听 * */ @Override public 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); } // ------------------------------生命周期重写方法--------------------------- @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); setViewContent(); } @Override public 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; } } }
由于模拟器无法实现导航,我这里就没有录屏,直接截几个界面图
主要参考博客:http://www.cnblogs.com/ouyangduoduo/p/4623680.html
以及高德官网