当前位置: 首页 > news >正文

为什么做的网站在谷歌浏览器打不开网站黑链怎么做的

为什么做的网站在谷歌浏览器打不开,网站黑链怎么做的,网站的主题,wordpress短代码页面周一又来了#xff0c;我就接着上次的开发步骤#xff08;一#xff09;来吧#xff0c;继续把高德地图的相关简单功能分享一下 上次写到了第六步#xff0c;接着写第七步吧。 第七步#xff1a;定位 地图选点 路径规划 实时导航 以下是我的这个功能NaviMapActivity的…周一又来了我就接着上次的开发步骤一来吧继续把高德地图的相关简单功能分享一下 上次写到了第六步接着写第七步吧。 第七步定位 地图选点 路径规划 实时导航 以下是我的这个功能NaviMapActivity的页面布局文件 1 ?xml version1.0 encodingutf-8?2 RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/android3 android:layout_widthmatch_parent4 android:layout_heightmatch_parent 5 6 7 8 LinearLayout9 android:idid/navibarcontainer10 android:layout_widthmatch_parent11 android:layout_heightwrap_content12 android:orientationvertical 13 14 15 LinearLayout16 android:layout_widthmatch_parent17 android:layout_heightwrap_content18 android:orientationvertical 19 20 RelativeLayout21 android:layout_widthmatch_parent22 android:layout_heightwrap_content 23 24 TextView25 android:idid/navistarttext26 android:layout_widthwrap_content27 android:layout_heightwrap_content28 android:layout_marginLeftdimen/navibar_margin_left29 android:layout_marginRightdimen/margin_right30 android:paddingBottomdimen/margin_bottom31 android:paddingTopdimen/margin_top32 android:textstring/navi_start33 android:textColorcolor/black34 android:textSizedimen/navibar_text_size /35 36 AutoCompleteTextView37 android:idid/navi_start_edit38 android:layout_widthwrap_content39 android:layout_heightdimen/navibar_edit_height40 android:layout_alignParentRighttrue41 android:layout_marginRightdimen/navibar_margin_right42 android:layout_toRightOfid/navistarttext43 android:focusablefalse44 android:hintstring/mypoistion45 android:paddingBottomdimen/margin_bottom46 android:paddingTopdimen/margin_top47 android:textSizedimen/navibar_text_size 48 /AutoCompleteTextView49 50 ImageView51 android:idid/navi_start_image52 android:layout_widthwrap_content53 android:layout_heightdimen/navibar_edit_height54 android:layout_alignBottomid/navi_start_edit55 android:layout_alignRightid/navi_start_edit56 android:layout_alignTopid/navi_start_edit57 android:layout_marginLeft0dp58 android:layout_marginRightdimen/margin_right59 android:srcdrawable/downarrow /60 /RelativeLayout61 62 RelativeLayout63 android:layout_widthmatch_parent64 android:layout_heightwrap_content65 android:orientationhorizontal 66 67 TextView68 android:idid/naviendtext69 android:layout_widthwrap_content70 android:layout_heightwrap_content71 android:layout_marginLeftdimen/navibar_margin_left72 android:layout_marginRightdimen/margin_right73 android:textstring/navi_end74 android:textColorcolor/black75 android:textSizedimen/navibar_text_size /76 77 EditText78 android:idid/navi_end_edit79 android:layout_widthwrap_content80 android:layout_heightdimen/navibar_edit_height81 android:layout_alignParentRighttrue82 android:layout_marginRightdimen/navibar_margin_right83 android:layout_toRightOfid/naviendtext84 android:focusablefalse85 android:paddingBottomdimen/margin_bottom86 android:paddingTopdimen/margin_top87 android:textSizedimen/navibar_text_size 88 /EditText89 90 ImageView91 android:idid/navi_end_image92 android:layout_widthwrap_content93 android:layout_heightdimen/navibar_edit_height94 android:layout_alignBottomid/navi_end_edit95 android:layout_alignRightid/navi_end_edit96 android:layout_alignTopid/navi_end_edit97 android:layout_marginRightdimen/margin_right98 android:srcdrawable/downarrow /99 /RelativeLayout 100 101 RelativeLayout 102 android:layout_widthmatch_parent 103 android:layout_heightwrap_content 104 105 LinearLayout 106 android:layout_widthmatch_parent 107 android:layout_heightwrap_content 108 android:gravitycenter_horizontal 109 android:orientationhorizontal 110 111 Button 112 android:idid/navi_route_button 113 android:layout_widthwrap_content 114 android:layout_heightdimen/navibar_button_height 115 android:layout_marginRightdimen/navibar_margin_right 116 android:paddingBottomdimen/margin_bottom 117 android:paddingTopdimen/margin_top 118 android:textstring/navi_route / 119 120 Button 121 android:idid/navi_navi_button 122 android:layout_widthwrap_content 123 android:layout_heightdimen/navibar_button_height 124 android:layout_marginLeftdimen/navibar_margin_left 125 android:paddingBottomdimen/margin_bottom 126 android:paddingTopdimen/margin_top 127 android:textstring/navi_navi / 128 /LinearLayout 129 /RelativeLayout 130 /LinearLayout 131 /LinearLayout 132 !-- 引入布局文件 -- 133 com.amap.api.maps.MapView 134 android:idid/map 135 android:layout_widthmatch_parent 136 android:layout_heightwrap_content 137 android:layout_alignParentBottomtrue 138 android:layout_belowid/navibarcontainer / 139 /RelativeLayout View Code 然后就是实现这个功能的代码 1 package com.oysd.activity;2 3 import java.util.ArrayList;4 import java.util.List;5 6 import android.app.Activity;7 import android.app.ProgressDialog;8 import android.content.Intent;9 import android.content.res.Resources;10 import android.graphics.BitmapFactory;11 import android.location.Location;12 import android.media.AudioManager;13 import android.os.Bundle;14 import android.text.InputType;15 import android.view.View;16 import android.view.View.OnClickListener;17 import android.widget.AdapterView;18 import android.widget.ArrayAdapter;19 import android.widget.AutoCompleteTextView;20 import android.widget.Button;21 import android.widget.EditText;22 import android.widget.ImageView;23 import android.widget.TextView;24 import android.widget.Toast;25 import android.widget.AdapterView.OnItemClickListener;26 27 import com.amap.api.location.AMapLocation;28 import com.amap.api.location.AMapLocationListener;29 import com.amap.api.location.LocationManagerProxy;30 import com.amap.api.location.LocationProviderProxy;31 import com.amap.api.maps.AMap;32 import com.amap.api.maps.MapView;33 import com.amap.api.maps.AMap.OnMapClickListener;34 import com.amap.api.maps.model.BitmapDescriptorFactory;35 import com.amap.api.maps.model.LatLng;36 import com.amap.api.maps.model.Marker;37 import com.amap.api.maps.model.MarkerOptions;38 import com.amap.api.navi.AMapNavi;39 import com.amap.api.navi.AMapNaviListener;40 import com.amap.api.navi.AMapNaviViewListener;41 import com.amap.api.navi.model.AMapNaviInfo;42 import com.amap.api.navi.model.AMapNaviLocation;43 import com.amap.api.navi.model.NaviInfo;44 import com.amap.api.navi.model.NaviLatLng;45 import com.oysd.Util.TTSController;46 import com.oysd.ouyangmap.R;47 import com.oysd.ouyangmap.R.drawable;48 import com.oysd.ouyangmap.R.id;49 import com.oysd.ouyangmap.R.layout;50 import com.oysd.ouyangmap.R.string;51 52 public class NaviMapActivity extends Activity implements AMapNaviViewListener, OnClickListener, OnMapClickListener {53 54 // --------------View基本控件---------------------55 private MapView mMapView;// 地图控件56 private AutoCompleteTextView mStartPointText;// 起点输入57 private EditText mEndPointText;// 终点输入58 private Button mRouteButton;// 路径规划按钮59 private Button mNaviButton;// 模拟导航按钮60 private ProgressDialog mProgressDialog;// 路径规划过程显示状态61 private ProgressDialog mGPSProgressDialog;// GPS过程显示状态62 private ImageView mStartImage;// 起点下拉按钮63 private ImageView mEndImage;// 终点点击按钮64 65 // 地图和导航核心逻辑类66 private AMap mAmap;67 private AMapNavi mAmapNavi;68 69 // ---------------------变量---------------------70 private String[] mPositionMethods;// 记录起点我的位置、地图点选数组71 72 // 驾车路径规划起点途经点终点的list73 private ListNaviLatLng mStartPoints new ArrayListNaviLatLng();74 private ListNaviLatLng mWayPoints new ArrayListNaviLatLng();75 private ListNaviLatLng mEndPoints new ArrayListNaviLatLng();76 77 // 记录起点、终点、途经点位置78 private NaviLatLng mStartPoint new NaviLatLng();79 private NaviLatLng mEndPoint new NaviLatLng();80 private NaviLatLng mWayPoint new NaviLatLng();81 82 83 // 记录起点、终点、途经点在地图上添加的Marker84 private Marker mStartMarker;85 private Marker mWayMarker;86 private Marker mEndMarker;87 private Marker mGPSMarker;88 89 private boolean mIsGetGPS false;// 记录GPS定位是否成功90 private boolean mIsStart false;// 记录是否已我的位置发起路径规划91 92 private ArrayAdapterString mPositionAdapter;93 94 private AMapNaviListener mAmapNaviListener;95 96 // 记录地图点击事件相应情况根据选择不同地图响应不同97 private int mMapClickMode MAP_CLICK_NO;98 private static final int MAP_CLICK_NO 0;// 地图不接受点击事件99 private static final int MAP_CLICK_START 1;// 地图点击设置起点 100 private static final int MAP_CLICK_WAY 2;// 地图点击设置途经点 101 private static final int MAP_CLICK_END 3;// 地图点击设置终点 102 // 记录导航种类用于记录当前选择是驾车还是步行 103 private int mTravelMethod WALK_NAVI_METHOD; 104 private static final int WALK_NAVI_METHOD 1;// 步行导航 105 106 107 private int mNaviMethod; 108 private static final int NAVI_METHOD 0;// 执行模拟导航操作 109 private static final int ROUTE_METHOD 1;// 执行计算线路操作 110 111 private int mStartPointMethod BY_MY_POSITION; 112 private static final int BY_MY_POSITION 0;// 以我的位置作为起点 113 private static final int BY_MAP_POSITION 1;// 以地图点选的点为起点 114 // 计算路的状态 115 private final static int GPSNO 0;// 使用我的位置进行计算、GPS定位还未成功状态 116 private final static int CALCULATEERROR 1;// 启动路径计算失败状态 117 private final static int CALCULATESUCCESS 2;// 启动路径计算成功状态 118 119 //定位 120 private LocationManagerProxy mLocationManger; 121 122 123 private AMapLocationListener mLocationListenernew AMapLocationListener() { 124 125 Override 126 public void onStatusChanged(String provider, int status, Bundle extras) { 127 // TODO Auto-generated method stub 128 129 } 130 131 Override 132 public void onProviderEnabled(String provider) { 133 // TODO Auto-generated method stub 134 135 } 136 137 Override 138 public void onProviderDisabled(String provider) { 139 // TODO Auto-generated method stub 140 141 } 142 143 Override 144 public void onLocationChanged(Location location) { 145 // TODO Auto-generated method stub 146 147 } 148 149 Override 150 public void onLocationChanged(AMapLocation location) { 151 if (location!nulllocation.getAMapException().getErrorCode() 0) { 152 mIsGetGPS true; 153 mStartPoint new NaviLatLng(location.getLatitude(), location.getLongitude()); 154 155 156 mGPSMarker.setPosition(new LatLng( 157 mStartPoint.getLatitude(), mStartPoint 158 .getLongitude())); 159 mStartPoints.clear(); 160 mStartPoints.add(mStartPoint); 161 162 dissmissGPSProgressDialog(); 163 164 calculateRoute(); 165 166 167 168 } 169 else{ 170 showToast(定位出现异常); 171 } 172 } 173 }; 174 175 Override 176 protected void onCreate(Bundle savedInstanceState) { 177 // TODO Auto-generated method stub 178 super.onCreate(savedInstanceState); 179 setContentView(R.layout.activity_navimap); 180 // 初始化所需资源、控件、事件监听 181 initResources(); 182 initView(savedInstanceState); 183 initListener(); 184 initMapAndNavi(); 185 //MainApplication.getInstance().addActivity(this); 186 } 187 188 189 /** 190 * 初始化地图和导航相关内容 191 */ 192 private void initMapAndNavi() { 193 // 初始语音播报资源 194 setVolumeControlStream(AudioManager.STREAM_MUSIC);// 设置声音控制 195 //语音播报开始 196 197 mAmapNavi AMapNavi.getInstance(this);// 初始化导航引擎 198 199 // 初始化Marker添加到地图 200 mStartMarker mAmap.addMarker(new MarkerOptions() 201 .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory 202 .decodeResource(getResources(), R.drawable.start)))); 203 mWayMarker mAmap.addMarker(new MarkerOptions() 204 .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory 205 .decodeResource(getResources(), R.drawable.way)))); 206 mEndMarker mAmap.addMarker(new MarkerOptions() 207 .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory 208 .decodeResource(getResources(), R.drawable.end)))); 209 mGPSMarker mAmap.addMarker(new MarkerOptions() 210 .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory 211 .decodeResource(getResources(), 212 R.drawable.location_marker)))); 213 } 214 /** 215 * 初始化资源文件主要是字符串 216 */ 217 private void initResources() { 218 Resources res getResources(); 219 mPositionMethods new String[] { res.getString(R.string.mypoistion), 220 res.getString(R.string.mappoistion) }; 221 222 } 223 224 /** 225 * 初始化界面所需View控件 226 * 227 * param savedInstanceState 228 */ 229 private void initView(Bundle savedInstanceState) { 230 mMapView (MapView) findViewById(R.id.map); 231 mMapView.onCreate(savedInstanceState); 232 mAmapmMapView.getMap(); 233 mStartPointText (AutoCompleteTextView) findViewById(R.id.navi_start_edit); 234 235 mStartPointText 236 .setDropDownBackgroundResource(R.drawable.whitedownborder); 237 mEndPointText (EditText) findViewById(R.id.navi_end_edit); 238 mStartPointText.setInputType(InputType.TYPE_NULL); 239 mEndPointText.setInputType(InputType.TYPE_NULL); 240 241 mPositionAdapter new ArrayAdapterString(this, 242 R.layout.strategy_inputs, mPositionMethods); 243 244 mStartPointText.setAdapter(mPositionAdapter); 245 246 mRouteButton (Button) findViewById(R.id.navi_route_button); 247 mNaviButton (Button) findViewById(R.id.navi_navi_button); 248 mStartImage (ImageView) findViewById(R.id.navi_start_image); 249 mEndImage (ImageView) findViewById(R.id.navi_end_image); 250 251 TTSController ttsManager TTSController.getInstance(this);// 初始化语音模块 252 ttsManager.init(); 253 AMapNavi.getInstance(this).setAMapNaviListener(ttsManager);// 设置语音模块播报 254 } 255 256 /** 257 * 初始化所需监听 258 */ 259 private void initListener() { 260 // 控件点击事件 261 mStartPointText.setOnClickListener(this); 262 mEndPointText.setOnClickListener(this); 263 mRouteButton.setOnClickListener(this); 264 mNaviButton.setOnClickListener(this); 265 mStartImage.setOnClickListener(this); 266 mEndImage.setOnClickListener(this); 267 // 设置地图点击事件 268 mAmap.setOnMapClickListener(this); 269 // 起点下拉框点击事件监听 270 mStartPointText.setOnItemClickListener(getOnItemClickListener()); 271 } 272 273 /** 274 * 起点下拉框点击事件监听 275 * */ 276 private OnItemClickListener getOnItemClickListener() { 277 return new OnItemClickListener() { 278 Override 279 public void onItemClick(AdapterView? arg0, View arg1, int index, 280 long arg3) { 281 switch (index) { 282 // 我的位置为起点进行导航或路径规划 283 case 0: 284 mStartPointMethod BY_MY_POSITION; 285 break; 286 // 地图点选起点进行导航或路径规划 287 case 1: 288 mStartPointMethod BY_MAP_POSITION; 289 mMapClickMode MAP_CLICK_START; 290 showToast(点击地图添加起点); 291 break; 292 } 293 294 } 295 296 }; 297 } 298 299 // ---------------UI操作---------------- 300 private void showToast(String message) { 301 Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); 302 } 303 304 private void setTextDescription(TextView view, String description) { 305 view.setText(description); 306 } 307 308 309 /** 310 * 地图点击事件监听 311 * */ 312 Override 313 public void onMapClick(LatLng latLng) { 314 // 默认不接受任何操作 315 if (mMapClickMode MAP_CLICK_NO) { 316 return; 317 } 318 // 其他情况根据起点、途经点、终点不同逻辑处理不同 319 addPointToMap(latLng); 320 321 } 322 323 /** 324 * 地图点击事件核心处理逻辑 325 * param position 326 */ 327 private void addPointToMap(LatLng position) { 328 NaviLatLng naviLatLng new NaviLatLng(position.latitude, 329 position.longitude); 330 switch (mMapClickMode) { 331 //起点 332 case MAP_CLICK_START: 333 mStartMarker.setPosition(position); 334 mStartPoint naviLatLng; 335 mStartPoints.clear(); 336 mStartPoints.add(mStartPoint); 337 setTextDescription(mStartPointText, 已成功设置起点); 338 break; 339 //终点 340 case MAP_CLICK_END: 341 mEndMarker.setPosition(position); 342 mEndPoints.clear(); 343 mEndPoint naviLatLng; 344 mEndPoints.add(mEndPoint); 345 setTextDescription(mEndPointText, 已成功设置终点); 346 break; 347 } 348 349 } 350 351 Override 352 public void onClick(View v) { 353 // TODO Auto-generated method stub 354 switch (v.getId()) { 355 // 路径规划按钮处理事件 356 case R.id.navi_route_button: 357 mNaviMethod ROUTE_METHOD; 358 calculateRoute(); 359 break; 360 // 模拟导航处理事件 361 case R.id.navi_navi_button: 362 mNaviMethod NAVI_METHOD; 363 calculateRoute(); 364 break; 365 // 起点点击事件 366 case R.id.navi_start_image: 367 case R.id.navi_start_edit: 368 setTextDescription(mStartPointText, null); 369 mPositionAdapter new ArrayAdapterString(this, 370 R.layout.strategy_inputs, mPositionMethods); 371 mStartPointText.setAdapter(mPositionAdapter); 372 mStartPoints.clear(); 373 mStartMarker.setPosition(null); 374 mStartPointText.showDropDown(); 375 break; 376 // 终点点击事件 377 case R.id.navi_end_image: 378 case R.id.navi_end_edit: 379 mMapClickMode MAP_CLICK_END; 380 mEndPoints.clear(); 381 mEndMarker.setPosition(null); 382 setTextDescription(mEndPointText, 点击地图设置终点); 383 showToast(点击地图添加终点); 384 break; 385 } 386 } 387 388 Override 389 public void onLockMap(boolean arg0) { 390 // TODO Auto-generated method stub 391 392 } 393 394 Override 395 public void onNaviCancel() { 396 // TODO Auto-generated method stub 397 398 } 399 400 Override 401 public void onNaviMapMode(int arg0) { 402 // TODO Auto-generated method stub 403 404 } 405 406 Override 407 public void onNaviSetting() { 408 // TODO Auto-generated method stub 409 410 } 411 412 Override 413 public void onNaviTurnClick() { 414 // TODO Auto-generated method stub 415 416 } 417 418 Override 419 public void onNextRoadClick() { 420 // TODO Auto-generated method stub 421 422 } 423 424 Override 425 public void onScanViewButtonClick() { 426 // TODO Auto-generated method stub 427 428 } 429 430 /** 431 * 算路的方法根据选择可以进行行车和步行两种方式进行路径规划 432 */ 433 private void calculateRoute() { 434 if(mStartPointMethodBY_MY_POSITION!mIsGetGPS){ 435 mLocationMangerLocationManagerProxy.getInstance(this); 436 //进行一次定位 437 mLocationManger.requestLocationData(LocationProviderProxy.AMapNetwork, -1, 15, mLocationListener); 438 showGPSProgressDialog(); 439 440 441 return; 442 443 } 444 mIsGetGPSfalse; 445 switch (mTravelMethod) { 446 // 步行导航 447 case WALK_NAVI_METHOD: 448 int walkIndex calculateWalkRoute(); 449 if (walkIndex CALCULATEERROR) { 450 showToast(路线计算失败,检查参数情况); 451 return; 452 } else if (walkIndex GPSNO) { 453 return; 454 } 455 break; 456 } 457 // 显示路径规划的窗体 458 showProgressDialog(); 459 } 460 461 462 463 /** 464 * 导航回调函数 465 * 466 * return 467 */ 468 private AMapNaviListener getAMapNaviListener() { 469 if (mAmapNaviListener null) { 470 471 mAmapNaviListener new AMapNaviListener() { 472 473 Override 474 public void onTrafficStatusUpdate() { 475 // TODO Auto-generated method stub 476 477 } 478 479 Override 480 public void onStartNavi(int arg0) { 481 // TODO Auto-generated method stub 482 483 } 484 485 Override 486 public void onReCalculateRouteForYaw() { 487 // TODO Auto-generated method stub 488 489 } 490 491 Override 492 public void onReCalculateRouteForTrafficJam() { 493 // TODO Auto-generated method stub 494 495 } 496 497 Override 498 public void onLocationChange(AMapNaviLocation location) { 499 500 501 } 502 503 Override 504 public void onInitNaviSuccess() { 505 // TODO Auto-generated method stub 506 507 } 508 509 Override 510 public void onInitNaviFailure() { 511 // TODO Auto-generated method stub 512 513 } 514 515 Override 516 public void onGetNavigationText(int arg0, String arg1) { 517 // TODO Auto-generated method stub 518 519 } 520 521 Override 522 public void onEndEmulatorNavi() { 523 // TODO Auto-generated method stub 524 525 } 526 527 Override 528 public void onCalculateRouteSuccess() { 529 dissmissProgressDialog(); 530 switch (mNaviMethod) { 531 //路径规划 532 case ROUTE_METHOD: 533 Intent intent new Intent(NaviMapActivity.this, 534 NaviRouteActivity.class); 535 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 536 startActivity(intent); 537 538 break; 539 //模拟导航 540 case NAVI_METHOD: 541 Intent standIntent new Intent(NaviMapActivity.this, 542 NaviCustomActivity.class); 543 standIntent 544 .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 545 startActivity(standIntent); 546 break; 547 } 548 } 549 550 Override 551 public void onCalculateRouteFailure(int arg0) { 552 dissmissProgressDialog(); 553 showToast(路径规划出错); 554 } 555 556 Override 557 public void onArrivedWayPoint(int arg0) { 558 // TODO Auto-generated method stub 559 560 } 561 562 Override 563 public void onArriveDestination() { 564 // TODO Auto-generated method stub 565 566 } 567 568 Override 569 public void onGpsOpenStatus(boolean arg0) { 570 // TODO Auto-generated method stub 571 572 } 573 574 Override 575 public void onNaviInfoUpdated(AMapNaviInfo arg0) { 576 // TODO Auto-generated method stub 577 578 } 579 580 Override 581 public void onNaviInfoUpdate(NaviInfo arg0) { 582 583 // TODO Auto-generated method stub 584 585 } 586 }; 587 } 588 return mAmapNaviListener; 589 } 590 591 592 /** 593 * 显示GPS进度框 594 */ 595 private void showGPSProgressDialog() { 596 if (mGPSProgressDialog null) 597 mGPSProgressDialog new ProgressDialog(this); 598 mGPSProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 599 mGPSProgressDialog.setIndeterminate(false); 600 mGPSProgressDialog.setCancelable(true); 601 mGPSProgressDialog.setMessage(定位中...); 602 mGPSProgressDialog.show(); 603 } 604 605 /** 606 * 隐藏进度框 607 */ 608 private void dissmissGPSProgressDialog() { 609 if (mGPSProgressDialog ! null) { 610 mGPSProgressDialog.dismiss(); 611 } 612 } 613 614 /** 615 * 显示进度框 616 */ 617 private void showProgressDialog() { 618 if (mProgressDialog null) 619 mProgressDialog new ProgressDialog(this); 620 mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 621 mProgressDialog.setIndeterminate(false); 622 mProgressDialog.setCancelable(true); 623 mProgressDialog.setMessage(线路规划中); 624 mProgressDialog.show(); 625 } 626 627 /** 628 * 对步行路线进行规划 629 */ 630 private int calculateWalkRoute() { 631 int code CALCULATEERROR; 632 if (mAmapNavi.calculateWalkRoute(mStartPoint, mEndPoint)) { 633 code CALCULATESUCCESS; 634 } else { 635 636 code CALCULATEERROR; 637 } 638 639 return code; 640 } 641 642 /** 643 * 隐藏进度框 644 */ 645 private void dissmissProgressDialog() { 646 if (mProgressDialog ! null) { 647 mProgressDialog.dismiss(); 648 } 649 } 650 651 // -------------生命周期必须重写方法---------------- 652 Override 653 protected void onSaveInstanceState(Bundle outState) { 654 super.onSaveInstanceState(outState); 655 mMapView.onSaveInstanceState(outState); 656 } 657 Override 658 public void onResume() { 659 super.onResume(); 660 mMapView.onResume(); 661 // 以上两句必须重写 662 // 以下两句逻辑是为了保证进入首页开启定位和加入导航回调 663 AMapNavi.getInstance(this).setAMapNaviListener(getAMapNaviListener()); 664 mAmapNavi.startGPS(); 665 TTSController.getInstance(this).startSpeaking(); 666 } 667 668 Override 669 public void onPause() { 670 super.onPause(); 671 mMapView.onPause(); 672 // 以上两句必须重写 673 // 下边逻辑是移除监听 674 AMapNavi.getInstance(this) 675 .removeAMapNaviListener(getAMapNaviListener()); 676 } 677 678 Override 679 public void onDestroy() { 680 super.onDestroy(); 681 mMapView.onDestroy(); 682 683 684 685 } 686 } View Code   当用户选择路径规划的时候会跳转到NaviRouteActivity,以下是其布局文件 1 ?xml version1.0 encodingutf-8?2 LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android3 android:layout_widthmatch_parent4 android:layout_heightmatch_parent5 android:backgroundcolor/grey6 android:orientationvertical 7 8 LinearLayout9 android:layout_widthmatch_parent10 android:layout_heightwrap_content11 android:backgrounddrawable/border 12 13 ImageView14 android:idid/route_back_view15 android:layout_widthwrap_content16 android:layout_heightwrap_content17 android:layout_marginBottomdimen/margin_bottom18 android:layout_marginTopdimen/margin_top19 android:srcdrawable/back_top /20 21 TextView22 android:layout_widthwrap_content23 android:layout_heightwrap_content24 android:layout_marginBottomdimen/margin_bottom25 android:layout_marginTopdimen/margin_top26 android:layout_weight127 android:gravitycenter_horizontal28 android:textstring/routeshow29 android:textColorcolor/black30 android:textSizedimen/titletext_size /31 /LinearLayout32 33 LinearLayout34 android:layout_widthmatch_parent35 android:layout_heightwrap_content36 android:layout_weight137 android:backgrounddrawable/border 38 39 com.amap.api.maps.MapView40 android:idid/routemap41 android:layout_widthmatch_parent42 android:layout_heightmatch_parent /43 /LinearLayout44 45 LinearLayout46 android:layout_widthmatch_parent47 android:layout_heightwrap_content 48 49 TextView50 android:layout_widthwrap_content51 android:layout_heightwrap_content52 android:layout_gravitycenter_horizontal53 android:paddingBottomdimen/margin_bottom54 android:paddingLeftdimen/margin_left55 android:paddingTopdimen/margin_top56 android:textstring/routeinfo_157 android:textColorcolor/black58 android:textSizedimen/route_text_size /59 60 TextView61 android:idid/navi_route_distance62 android:layout_widthwrap_content63 android:layout_heightwrap_content64 android:layout_gravitycenter_horizontal65 android:paddingBottomdimen/margin_bottom66 android:paddingLeftdimen/margin_left67 android:paddingTopdimen/margin_top68 android:textstring/routeinfo_default69 android:textColorcolor/red70 android:textSizedimen/route_text_size /71 72 TextView73 android:layout_widthwrap_content74 android:layout_heightwrap_content75 android:layout_gravitycenter_horizontal76 android:paddingBottomdimen/margin_bottom77 android:paddingTopdimen/margin_top78 android:textstring/routeinfo_279 android:textColorcolor/black80 android:textSizedimen/route_text_size /81 82 TextView83 android:idid/navi_route_time84 android:layout_widthwrap_content85 android:layout_heightwrap_content86 android:layout_gravitycenter_horizontal87 android:paddingBottomdimen/margin_bottom88 android:paddingLeftdimen/margin_left89 android:paddingTopdimen/margin_top90 android:textstring/routeinfo_default91 android:textColorcolor/red92 android:textSizedimen/route_text_size /93 94 TextView95 android:idid/navi_route_cost_before96 android:layout_widthwrap_content97 android:layout_heightwrap_content98 android:layout_gravitycenter_horizontal99 android:paddingBottomdimen/margin_bottom 100 android:paddingTopdimen/margin_top 101 android:textstring/routeinfo_3 102 android:textColorcolor/black 103 android:textSizedimen/route_text_size / 104 105 TextView 106 android:idid/navi_route_cost 107 android:layout_widthwrap_content 108 android:layout_heightwrap_content 109 android:layout_gravitycenter_horizontal 110 android:paddingBottomdimen/margin_bottom 111 android:paddingLeftdimen/margin_left 112 android:paddingTopdimen/margin_top 113 android:textstring/routeinfo_default 114 android:textColorcolor/red 115 android:singleLinetrue 116 android:textSizedimen/route_text_size / 117 118 TextView 119 android:idid/navi_route_cost_after 120 android:layout_widthwrap_content 121 android:layout_heightwrap_content 122 android:layout_gravitycenter_horizontal 123 android:paddingBottomdimen/margin_bottom 124 android:paddingTopdimen/margin_top 125 android:textstring/routeinfo_4 126 android:textColorcolor/black 127 android:textSizedimen/route_text_size / 128 /LinearLayout 129 130 RelativeLayout 131 android:layout_widthmatch_parent 132 android:layout_heightwrap_content 133 134 Button 135 android:idid/routestartnavi 136 android:layout_widthwrap_content 137 android:layout_heightdimen/naviroute_navi_height 138 android:layout_alignParentRighttrue 139 android:textstring/start_navi_navi / 140 141 AutoCompleteTextView 142 android:idid/navi_theme_text 143 android:layout_widthwrap_content 144 android:layout_heightdimen/naviroute_navi_height 145 android:layout_alignParentLefttrue 146 android:layout_toLeftOfid/routestartnavi 147 android:focusablefalse 148 android:hintstring/theme_blue 149 /AutoCompleteTextView 150 151 ImageView 152 android:idid/navi_theme_image 153 android:layout_widthwrap_content 154 android:layout_heightdimen/naviroute_navi_height 155 android:layout_alignBottomid/navi_theme_text 156 android:layout_alignRightid/navi_theme_text 157 android:layout_alignTopid/navi_theme_text 158 android:layout_marginRightdimen/margin_right 159 android:srcdrawable/downarrow / 160 /RelativeLayout 161 162 /LinearLayout View Code 紧接着是其实现代码主要来自高德API官网 1 package com.oysd.activity;2 3 import android.app.Activity;4 import android.content.Intent;5 import android.content.res.Resources;6 import android.os.Bundle;7 import android.text.InputType;8 import android.view.KeyEvent;9 import android.view.View;10 import android.view.View.OnClickListener;11 import android.widget.ArrayAdapter;12 import android.widget.AutoCompleteTextView;13 import android.widget.Button;14 import android.widget.ImageView;15 import android.widget.TextView;16 17 import com.amap.api.maps.AMap;18 import com.amap.api.maps.MapView;19 import com.amap.api.maps.AMap.OnMapLoadedListener;20 import com.amap.api.navi.AMapNavi;21 import com.amap.api.navi.AMapNaviViewOptions;22 import com.amap.api.navi.model.AMapNaviPath;23 import com.amap.api.navi.view.RouteOverLay;24 import com.oysd.ouyangmap.R;25 import com.oysd.ouyangmap.R.drawable;26 import com.oysd.ouyangmap.R.id;27 import com.oysd.ouyangmap.R.layout;28 import com.oysd.ouyangmap.R.string;29 30 /**31 * 路径规划结果展示界面32 */33 public class NaviRouteActivity extends Activity implements OnClickListener,34 OnMapLoadedListener {35 36 // View37 private Button mStartNaviButton;// 实时导航按钮38 private MapView mMapView;// 地图控件39 private AutoCompleteTextView mThemeText;// 选择导航界面的风格40 private ImageView mThemeImage;// 选择按钮41 private ImageView mRouteBackView;// 返回按钮42 private TextView mRouteDistanceView;// 距离显示控件43 private TextView mRouteTimeView;// 时间显示控件44 private TextView mRouteCostView;// 花费显示控件45 // 地图导航资源46 private AMap mAmap;47 private AMapNavi mAmapNavi;48 private RouteOverLay mRouteOverLay;49 // 主题数组50 private String mTheme[];51 52 private boolean mIsMapLoaded false;53 54 protected void onCreate(Bundle savedInstanceState) {55 super.onCreate(savedInstanceState);56 setContentView(R.layout.activity_route);57 initResources();58 initView(savedInstanceState);59 //MainApplication.getInstance().addActivity(this);60 }61 62 // -----------------------初始化----------------------------------63 64 /**65 * 初始化资源66 */67 private void initResources() {68 Resources res getResources();69 mTheme new String[] { res.getString(R.string.theme_blue),70 res.getString(R.string.theme_pink),71 res.getString(R.string.theme_white) };72 }73 74 /**75 * 初始化控件76 */77 private void initView(Bundle savedInstanceState) {78 mStartNaviButton (Button) findViewById(R.id.routestartnavi);79 80 mRouteBackView (ImageView) findViewById(R.id.route_back_view);81 82 mThemeText (AutoCompleteTextView) findViewById(R.id.navi_theme_text);83 mThemeText.setInputType(InputType.TYPE_NULL);84 ArrayAdapterString themeAdapter new ArrayAdapterString(this,85 R.layout.strategy_inputs, mTheme);86 mThemeText.setAdapter(themeAdapter);87 88 mThemeText.setDropDownBackgroundResource(R.drawable.whitedownborder);89 90 mThemeImage (ImageView) findViewById(R.id.navi_theme_image);91 mRouteDistanceView (TextView) findViewById(R.id.navi_route_distance);92 mRouteTimeView (TextView) findViewById(R.id.navi_route_time);93 mRouteCostView (TextView) findViewById(R.id.navi_route_cost);94 mMapView (MapView) findViewById(R.id.routemap);95 mMapView.onCreate(savedInstanceState);96 mAmap mMapView.getMap();97 mAmap.setOnMapLoadedListener(this);98 mThemeImage.setOnClickListener(this);99 mThemeText.setOnClickListener(this); 100 mStartNaviButton.setOnClickListener(this); 101 mRouteBackView.setOnClickListener(this); 102 mRouteOverLay new RouteOverLay(mAmap, null); 103 } 104 105 /** 106 * 初始化路线描述信息和加载线路 107 */ 108 private void initNavi() { 109 110 mAmapNavi AMapNavi.getInstance(this); 111 AMapNaviPath naviPath mAmapNavi.getNaviPath(); 112 if (naviPath null) { 113 return; 114 } 115 // 获取路径规划线路显示到地图上 116 mRouteOverLay.setRouteInfo(naviPath); 117 mRouteOverLay.addToMap(); 118 if (mIsMapLoaded) { 119 mRouteOverLay.zoomToSpan(); 120 } 121 122 double length ((int) (naviPath.getAllLength() / (double) 1000 * 10)) 123 / (double) 10; 124 // 不足分钟 按分钟计 125 int time (naviPath.getAllTime() 59) / 60; 126 int cost naviPath.getTollCost(); 127 mRouteDistanceView.setText(String.valueOf(length)); 128 mRouteTimeView.setText(String.valueOf(time)); 129 mRouteCostView.setText(String.valueOf(cost)); 130 } 131 132 /** 133 * 获取导航界面主题样式 134 * 135 * param themeColor 136 * return 137 */ 138 private int getThemeStyle(String themeColor) { 139 int theme AMapNaviViewOptions.BLUE_COLOR_TOPIC; 140 if (mTheme[0].equals(themeColor)) { 141 theme AMapNaviViewOptions.BLUE_COLOR_TOPIC; 142 } else if (mTheme[1].equals(themeColor)) { 143 theme AMapNaviViewOptions.PINK_COLOR_TOPIC; 144 } else if (mTheme[2].equals(themeColor)) { 145 theme AMapNaviViewOptions.WHITE_COLOR_TOPIC; 146 } 147 return theme; 148 } 149 150 // ------------------------------事件处理----------------------------- 151 Override 152 public void onClick(View v) { 153 switch (v.getId()) { 154 // 实时导航操作 155 case R.id.routestartnavi: 156 Bundle bundle new Bundle(); 157 bundle.putInt(theme, getThemeStyle(mThemeText.getText() 158 .toString())); 159 Intent routeIntent new Intent(NaviRouteActivity.this, 160 NaviCustomActivity.class); 161 routeIntent.putExtras(bundle); 162 startActivity(routeIntent); 163 break; 164 // 返回操作 165 case R.id.route_back_view: 166 Intent startIntent new Intent(NaviRouteActivity.this, 167 NaviMapActivity.class); 168 startIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 169 startActivity(startIntent); 170 //MainApplication.getInstance().deleteActivity(this); 171 finish(); 172 break; 173 // 主题选择 174 case R.id.navi_theme_image: 175 case R.id.navi_theme_text: 176 mThemeText.showDropDown(); 177 break; 178 } 179 180 } 181 182 /** 183 * 184 * 返回键监听 185 * */ 186 Override 187 public boolean onKeyDown(int keyCode, KeyEvent event) { 188 189 if (keyCode KeyEvent.KEYCODE_BACK) { 190 Intent intent new Intent(NaviRouteActivity.this, 191 NaviMapActivity.class); 192 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 193 startActivity(intent); 194 //MainApplication.getInstance().deleteActivity(this); 195 finish(); 196 197 } 198 return super.onKeyDown(keyCode, event); 199 } 200 201 // ------------------------------生命周期必须重写方法--------------------------- 202 Override 203 protected void onSaveInstanceState(Bundle outState) { 204 super.onSaveInstanceState(outState); 205 mMapView.onSaveInstanceState(outState); 206 } 207 208 Override 209 public void onResume() { 210 super.onResume(); 211 mMapView.onResume(); 212 initNavi(); 213 } 214 215 Override 216 public void onPause() { 217 super.onPause(); 218 mMapView.onPause(); 219 } 220 221 Override 222 public void onDestroy() { 223 super.onDestroy(); 224 mMapView.onDestroy(); 225 } 226 227 Override 228 public void onMapLoaded() { 229 mIsMapLoaded true; 230 if (mRouteOverLay ! null) { 231 mRouteOverLay.zoomToSpan(); 232 233 } 234 } 235 236 } View Code   当用户点击模拟导航 或者 这路径规划界面点击实时导航的时候界面跳转到NaviCustomActivity,以下是其布局文件 1 ?xml version1.0 encodingutf-8?2 LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android3 android:idid/map_container4 android:layout_widthmatch_parent5 android:layout_heightmatch_parent6 android:orientationvertical 7 com.amap.api.navi.AMapNaviView8 android:idid/customnavimap9 android:layout_widthmatch_parent 10 android:layout_heightmatch_parent 11 / 12 13 /LinearLayout View Code 然后是其实现代码 1 package com.oysd.activity;2 3 import android.app.Activity;4 import android.content.Intent;5 import android.os.Bundle;6 import android.view.KeyEvent;7 8 import com.amap.api.navi.AMapNavi;9 import com.amap.api.navi.AMapNaviListener;10 import com.amap.api.navi.AMapNaviView;11 import com.amap.api.navi.AMapNaviViewListener;12 import com.amap.api.navi.AMapNaviViewOptions;13 import com.amap.api.navi.model.AMapNaviInfo;14 import com.amap.api.navi.model.AMapNaviLocation;15 import com.amap.api.navi.model.NaviInfo;16 import com.oysd.Util.TTSController;17 import com.oysd.Util.Utils;18 import com.oysd.ouyangmap.R;19 import com.oysd.ouyangmap.R.id;20 import com.oysd.ouyangmap.R.layout;21 22 /**23 * 实时导航界面24 * 25 */26 public class NaviCustomActivity extends Activity implements27 AMapNaviViewListener {28 29 private AMapNaviView mAmapAMapNaviView;30 // 导航可以设置的参数31 private boolean mDayNightFlag Utils.DAY_MODE;// 默认为白天模式32 private boolean mDeviationFlag Utils.YES_MODE;// 默认进行偏航重算33 private boolean mJamFlag Utils.YES_MODE;// 默认进行拥堵重算34 private boolean mTrafficFlag Utils.OPEN_MODE;// 默认进行交通播报35 private boolean mCameraFlag Utils.OPEN_MODE;// 默认进行摄像头播报36 private boolean mScreenFlag Utils.YES_MODE;// 默认是屏幕常亮37 // 导航界面风格38 private int mThemeStle;39 // 导航监听40 private AMapNaviListener mAmapNaviListener;41 42 public void onCreate(Bundle savedInstanceState) {43 super.onCreate(savedInstanceState);44 setContentView(R.layout.activity_navicustom);45 //语音播报开始46 TTSController.getInstance(this).startSpeaking();47 // 实时导航方式进行导航48 AMapNavi.getInstance(this).startNavi(AMapNavi.GPSNaviMode);49 50 initView(savedInstanceState);51 }52 53 private void initView(Bundle savedInstanceState) {54 mAmapAMapNaviView (AMapNaviView) findViewById(R.id.customnavimap);55 mAmapAMapNaviView.onCreate(savedInstanceState);56 mAmapAMapNaviView.setAMapNaviViewListener(this);57 setAmapNaviViewOptions();58 }59 60 /**61 * 设置导航的参数62 */63 private void setAmapNaviViewOptions() {64 if (mAmapAMapNaviView null) {65 return;66 }67 AMapNaviViewOptions viewOptions new AMapNaviViewOptions();68 viewOptions.setSettingMenuEnabled(true);// 设置导航setting可用69 viewOptions.setNaviNight(mDayNightFlag);// 设置导航是否为黑夜模式70 viewOptions.setReCalculateRouteForYaw(mDeviationFlag);// 设置导偏航是否重算71 viewOptions.setReCalculateRouteForTrafficJam(mJamFlag);// 设置交通拥挤是否重算72 viewOptions.setTrafficInfoUpdateEnabled(mTrafficFlag);// 设置是否更新路况73 viewOptions.setCameraInfoUpdateEnabled(mCameraFlag);// 设置摄像头播报74 viewOptions.setScreenAlwaysBright(mScreenFlag);// 设置屏幕常亮情况75 viewOptions.setNaviViewTopic(mThemeStle);// 设置导航界面主题样式76 77 mAmapAMapNaviView.setViewOptions(viewOptions);78 79 }80 81 private AMapNaviListener getAMapNaviListener() {82 if (mAmapNaviListener null) {83 84 mAmapNaviListener new AMapNaviListener() {85 86 Override87 public void onTrafficStatusUpdate() {88 // TODO Auto-generated method stub89 90 }91 92 Override93 public void onStartNavi(int arg0) {94 // TODO Auto-generated method stub95 96 }97 98 Override99 public void onReCalculateRouteForYaw() { 100 // 可以在频繁重算时进行设置,例如五次之后 101 // i; 102 // if (i 5) { 103 // AMapNaviViewOptions viewOptions new 104 // AMapNaviViewOptions(); 105 // viewOptions.setReCalculateRouteForYaw(false); 106 // mAmapAMapNaviView.setViewOptions(viewOptions); 107 // } 108 } 109 110 Override 111 public void onReCalculateRouteForTrafficJam() { 112 113 } 114 115 Override 116 public void onLocationChange(AMapNaviLocation location) { 117 118 } 119 120 Override 121 public void onInitNaviSuccess() { 122 // TODO Auto-generated method stub 123 124 } 125 126 Override 127 public void onInitNaviFailure() { 128 // TODO Auto-generated method stub 129 130 } 131 132 Override 133 public void onGetNavigationText(int arg0, String arg1) { 134 // TODO Auto-generated method stub 135 136 } 137 138 Override 139 public void onEndEmulatorNavi() { 140 // TODO Auto-generated method stub 141 142 } 143 144 Override 145 public void onCalculateRouteSuccess() { 146 147 } 148 149 Override 150 public void onCalculateRouteFailure(int arg0) { 151 152 } 153 154 Override 155 public void onArrivedWayPoint(int arg0) { 156 // TODO Auto-generated method stub 157 158 } 159 160 Override 161 public void onArriveDestination() { 162 // TODO Auto-generated method stub 163 164 } 165 166 Override 167 public void onGpsOpenStatus(boolean arg0) { 168 // TODO Auto-generated method stub 169 170 } 171 172 Override 173 public void onNaviInfoUpdated(AMapNaviInfo arg0) { 174 // TODO Auto-generated method stub 175 176 } 177 178 Override 179 public void onNaviInfoUpdate(NaviInfo arg0) { 180 181 // TODO Auto-generated method stub 182 183 } 184 }; 185 } 186 return mAmapNaviListener; 187 } 188 189 // -------处理 190 /** 191 * 导航界面返回按钮监听 192 * */ 193 Override 194 public void onNaviCancel() { 195 Intent intent new Intent(NaviCustomActivity.this, 196 FunctionsListActivity.class); 197 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 198 startActivity(intent); 199 finish(); 200 } 201 202 /** 203 * 点击设置按钮的事件 204 */ 205 Override 206 public void onNaviSetting() { 207 Bundle bundle new Bundle(); 208 bundle.putInt(Utils.THEME, mThemeStle); 209 bundle.putBoolean(Utils.DAY_NIGHT_MODE, mDayNightFlag); 210 bundle.putBoolean(Utils.DEVIATION, mDeviationFlag); 211 bundle.putBoolean(Utils.JAM, mJamFlag); 212 bundle.putBoolean(Utils.TRAFFIC, mTrafficFlag); 213 bundle.putBoolean(Utils.CAMERA, mCameraFlag); 214 bundle.putBoolean(Utils.SCREEN, mScreenFlag); 215 Intent intent new Intent(NaviCustomActivity.this, 216 NaviSettingActivity.class); 217 intent.putExtras(bundle); 218 startActivity(intent); 219 220 } 221 222 Override 223 public void onNaviMapMode(int arg0) { 224 225 } 226 Override 227 public void onNaviTurnClick() { 228 229 230 } 231 232 Override 233 public void onNextRoadClick() { 234 // TODO Auto-generated method stub 235 236 } 237 238 Override 239 public void onScanViewButtonClick() { 240 // TODO Auto-generated method stub 241 242 } 243 private void processBundle(Bundle bundle) { 244 245 if (bundle ! null) { 246 mDayNightFlag bundle.getBoolean(Utils.DAY_NIGHT_MODE, 247 mDayNightFlag); 248 mDeviationFlag bundle.getBoolean(Utils.DEVIATION, mDeviationFlag); 249 mJamFlag bundle.getBoolean(Utils.JAM, mJamFlag); 250 mTrafficFlag bundle.getBoolean(Utils.TRAFFIC, mTrafficFlag); 251 mCameraFlag bundle.getBoolean(Utils.CAMERA, mCameraFlag); 252 mScreenFlag bundle.getBoolean(Utils.SCREEN, mScreenFlag); 253 mThemeStle bundle.getInt(Utils.THEME); 254 255 } 256 } 257 258 Override 259 protected void onNewIntent(Intent intent) { 260 // TODO Auto-generated method stub 261 super.onNewIntent(intent); 262 setIntent(intent); 263 } 264 265 Override 266 public boolean onKeyDown(int keyCode, KeyEvent event) { 267 268 if (keyCode KeyEvent.KEYCODE_BACK) { 269 Intent intent new Intent(NaviCustomActivity.this, 270 NaviMapActivity.class); 271 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 272 startActivity(intent); 273 finish(); 274 } 275 return super.onKeyDown(keyCode, event); 276 } 277 278 // ------------------------------生命周期方法--------------------------- 279 Override 280 protected void onSaveInstanceState(Bundle outState) { 281 super.onSaveInstanceState(outState); 282 mAmapAMapNaviView.onSaveInstanceState(outState); 283 } 284 285 Override 286 public void onResume() { 287 // TODO Auto-generated method stub 288 super.onResume(); 289 Bundle bundle getIntent().getExtras(); 290 processBundle(bundle); 291 setAmapNaviViewOptions(); 292 AMapNavi.getInstance(this).setAMapNaviListener(getAMapNaviListener()); 293 mAmapAMapNaviView.onResume(); 294 295 } 296 297 Override 298 public void onPause() { 299 mAmapAMapNaviView.onPause(); 300 super.onPause(); 301 AMapNavi.getInstance(this) 302 .removeAMapNaviListener(getAMapNaviListener()); 303 304 } 305 306 Override 307 public void onDestroy() { 308 309 super.onDestroy(); 310 mAmapAMapNaviView.onDestroy(); 311 //页面结束时停止语音播报 312 TTSController.getInstance(this).stopSpeaking(); 313 } 314 315 Override 316 public void onLockMap(boolean arg0) { 317 318 // TODO Auto-generated method stub 319 320 } 321 322 323 324 } View Code 其中包括页面的设置界面NaviSettingActivity的布局文件 1 ?xml version1.0 encodingutf-8?2 LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android3 android:layout_widthmatch_parent4 android:layout_heightmatch_parent5 android:backgroundcolor/grey6 android:orientationvertical 7 8 RelativeLayout9 android:layout_widthmatch_parent10 android:layout_heightwrap_content11 android:layout_marginBottomdimen/setting_margin_bottom 12 13 ImageView14 android:idid/setting_back_image15 android:layout_widthwrap_content16 android:layout_heightwrap_content17 android:srcdrawable/back_top /18 19 TextView20 android:layout_widthwrap_content21 android:layout_heightwrap_content22 android:layout_centerHorizontaltrue23 android:layout_weight124 android:gravitycenter_horizontal25 android:textstring/setting26 android:textColorcolor/black27 android:textSizedimen/titletext_size /28 /RelativeLayout29 30 RelativeLayout31 android:layout_widthmatch_parent32 android:layout_heightwrap_content33 android:layout_marginBottomdimen/setting_margin_bottom34 android:layout_marginLeftdimen/navibar_margin_left35 android:layout_marginRightdimen/navibar_margin_right36 android:layout_marginTopdimen/setting_margin_top37 android:layout_weight138 android:gravitycenter_vertical39 android:backgrounddrawable/whiteborder 40 41 TextView42 android:layout_widthwrap_content43 android:layout_heightwrap_content44 android:layout_marginLeftdimen/margin_left45 android:layout_marginTop10dp46 android:gravitycenter_vertical47 android:textstring/daynightmode48 android:textColorcolor/black49 android:textSizedimen/navisetting_subtext_size /50 51 RadioGroup52 android:idid/day_night_group53 android:layout_widthwrap_content54 android:layout_heightwrap_content55 android:layout_alignParentRighttrue56 android:layout_marginRightdimen/margin_right57 android:orientationhorizontal 58 59 RadioButton60 android:idid/dayratio61 android:layout_widthwrap_content62 android:layout_heightwrap_content63 android:layout_marginRightdimen/margin_right64 android:checkedtrue65 android:textstring/day66 android:textColorcolor/black /67 68 RadioButton69 android:idid/nightradio70 android:layout_widthwrap_content71 android:layout_heightwrap_content72 android:textstring/night73 android:textColorcolor/black /74 /RadioGroup75 /RelativeLayout76 77 RelativeLayout78 android:layout_weight179 android:layout_widthmatch_parent80 android:layout_heightwrap_content81 android:layout_marginBottomdimen/setting_margin_bottom82 android:layout_marginLeftdimen/navibar_margin_left83 android:layout_marginRightdimen/navibar_margin_right84 android:layout_marginTopdimen/setting_margin_top85 android:gravitycenter_vertical86 android:backgrounddrawable/whiteborder 87 88 TextView89 android:layout_widthwrap_content90 android:layout_heightwrap_content91 android:layout_marginLeftdimen/margin_left92 android:layout_marginTop10dp93 android:textstring/deviationrecalculation94 android:textColorcolor/black95 android:textSizedimen/navisetting_subtext_size /96 97 RadioGroup98 android:idid/deviation_group99 android:layout_widthwrap_content 100 android:layout_heightwrap_content 101 android:layout_alignParentRighttrue 102 android:layout_marginRightdimen/margin_right 103 android:orientationhorizontal 104 105 RadioButton 106 android:idid/deviationyesradio 107 android:layout_widthwrap_content 108 android:layout_heightwrap_content 109 android:layout_marginRightdimen/margin_right 110 android:checkedtrue 111 android:textstring/yes 112 android:textColorcolor/black / 113 114 RadioButton 115 android:idid/deviationnoradio 116 android:layout_widthwrap_content 117 android:layout_heightwrap_content 118 android:textstring/no 119 android:textColorcolor/black / 120 /RadioGroup 121 /RelativeLayout 122 123 RelativeLayout 124 android:layout_weight1 125 android:layout_widthmatch_parent 126 android:layout_heightwrap_content 127 android:gravitycenter_vertical 128 android:layout_marginBottomdimen/setting_margin_bottom 129 android:layout_marginLeftdimen/navibar_margin_left 130 android:layout_marginRightdimen/navibar_margin_right 131 android:layout_marginTopdimen/setting_margin_top 132 android:backgrounddrawable/whiteborder 133 134 TextView 135 android:layout_widthwrap_content 136 android:layout_heightwrap_content 137 android:layout_marginLeftdimen/margin_left 138 android:layout_marginTop10dp 139 android:textstring/jamrecalculation 140 android:textColorcolor/black 141 android:textSizedimen/navisetting_subtext_size / 142 143 RadioGroup 144 android:idid/jam_group 145 android:layout_widthwrap_content 146 android:layout_heightwrap_content 147 android:layout_alignParentRighttrue 148 android:layout_marginRightdimen/margin_right 149 android:orientationhorizontal 150 151 RadioButton 152 android:idid/jam_yes_radio 153 android:layout_widthwrap_content 154 android:layout_heightwrap_content 155 android:layout_marginRightdimen/margin_right 156 android:checkedtrue 157 android:textstring/yes 158 android:textColorcolor/black / 159 160 RadioButton 161 android:idid/jam_no_radio 162 android:layout_widthwrap_content 163 android:layout_heightwrap_content 164 android:textstring/no 165 android:textColorcolor/black / 166 /RadioGroup 167 /RelativeLayout 168 169 RelativeLayout 170 android:layout_weight1 171 android:layout_widthmatch_parent 172 android:layout_heightwrap_content 173 android:gravitycenter_vertical 174 android:layout_marginBottomdimen/setting_margin_bottom 175 android:layout_marginLeftdimen/navibar_margin_left 176 android:layout_marginRightdimen/navibar_margin_right 177 android:layout_marginTopdimen/setting_margin_top 178 android:backgrounddrawable/whiteborder 179 180 TextView 181 android:idid/textView2 182 android:layout_widthwrap_content 183 android:layout_heightwrap_content 184 android:layout_marginLeftdimen/margin_left 185 android:layout_marginTop10dp 186 android:textstring/trafficbroadcast 187 android:textColorcolor/black 188 android:textSizedimen/navisetting_subtext_size / 189 190 RadioGroup 191 android:idid/traffic_group 192 android:layout_widthwrap_content 193 android:layout_heightwrap_content 194 android:layout_alignParentRighttrue 195 android:layout_marginRightdimen/margin_right 196 android:orientationhorizontal 197 198 RadioButton 199 android:idid/trafficyesradio 200 android:layout_widthwrap_content 201 android:layout_heightwrap_content 202 android:layout_marginRightdimen/margin_right 203 android:checkedtrue 204 android:textstring/open 205 android:textColorcolor/black / 206 207 RadioButton 208 android:idid/trafficnoradio 209 android:layout_widthwrap_content 210 android:layout_heightwrap_content 211 android:textstring/close 212 android:textColorcolor/black / 213 /RadioGroup 214 /RelativeLayout 215 216 RelativeLayout 217 android:layout_weight1 218 android:layout_widthmatch_parent 219 android:layout_heightwrap_content 220 android:gravitycenter_vertical 221 android:layout_marginBottomdimen/setting_margin_bottom 222 android:layout_marginLeftdimen/navibar_margin_left 223 android:layout_marginRightdimen/navibar_margin_right 224 android:layout_marginTopdimen/setting_margin_top 225 android:backgrounddrawable/whiteborder 226 227 TextView 228 android:layout_widthwrap_content 229 android:layout_heightwrap_content 230 android:layout_marginLeftdimen/margin_left 231 android:layout_marginTop10dp 232 android:textstring/camerabroadcast 233 android:textColorcolor/black 234 android:textSizedimen/navisetting_subtext_size / 235 236 RadioGroup 237 android:idid/camera_group 238 android:layout_widthwrap_content 239 android:layout_heightwrap_content 240 android:layout_alignParentRighttrue 241 android:layout_marginRightdimen/margin_right 242 android:orientationhorizontal 243 244 RadioButton 245 android:idid/camerayesradio 246 android:layout_widthwrap_content 247 android:layout_heightwrap_content 248 android:layout_marginRightdimen/margin_right 249 android:checkedtrue 250 android:textstring/open 251 android:textColorcolor/black / 252 253 RadioButton 254 android:idid/cameranoradio 255 android:layout_widthwrap_content 256 android:layout_heightwrap_content 257 android:textstring/close 258 android:textColorcolor/black / 259 /RadioGroup 260 /RelativeLayout 261 262 RelativeLayout 263 android:layout_weight1 264 android:layout_widthmatch_parent 265 android:layout_heightwrap_content 266 android:gravitycenter_vertical 267 android:layout_marginBottomdimen/setting_margin_bottom 268 android:layout_marginLeftdimen/navibar_margin_left 269 android:layout_marginRightdimen/navibar_margin_right 270 android:layout_marginTopdimen/setting_margin_top 271 android:backgrounddrawable/whiteborder 272 273 TextView 274 android:layout_widthwrap_content 275 android:layout_heightwrap_content 276 android:layout_marginLeftdimen/margin_left 277 android:layout_marginTop10dp 278 android:textstring/screenon 279 android:textColorcolor/black 280 android:textSizedimen/navisetting_subtext_size / 281 282 RadioGroup 283 android:idid/screen_group 284 android:layout_widthwrap_content 285 android:layout_heightwrap_content 286 android:layout_alignParentRighttrue 287 android:layout_marginRightdimen/margin_right 288 android:orientationhorizontal 289 290 RadioButton 291 android:idid/screenonradio 292 android:layout_widthwrap_content 293 android:layout_heightwrap_content 294 android:layout_marginRightdimen/margin_right 295 android:checkedtrue 296 android:textstring/yes 297 android:textColorcolor/black / 298 299 RadioButton 300 android:idid/screenoffradio 301 android:layout_widthwrap_content 302 android:layout_heightwrap_content 303 android:textstring/no 304 android:textColorcolor/black / 305 /RadioGroup 306 /RelativeLayout 307 308 /LinearLayout View Code 实现代码 1 package com.oysd.activity;2 3 import android.app.Activity;4 import android.content.Intent;5 import android.os.Bundle;6 import android.view.KeyEvent;7 import android.view.View;8 import android.view.View.OnClickListener;9 import android.widget.ImageView;10 import android.widget.RadioGroup;11 import android.widget.RadioGroup.OnCheckedChangeListener;12 13 import com.amap.api.navi.AMapNaviViewOptions;14 import com.oysd.Util.Utils;15 import com.oysd.ouyangmap.R;16 import com.oysd.ouyangmap.R.id;17 import com.oysd.ouyangmap.R.layout;18 19 /**20 * 导航设置界面21 *22 */23 public class NaviSettingActivity extends Activity implements OnClickListener,24 OnCheckedChangeListener {25 // ----------------View26 27 private ImageView mBackView;//返回按钮28 private RadioGroup mDayNightGroup;//黑夜模式白天模式29 private RadioGroup mDeviationGroup;//偏航重算30 private RadioGroup mJamGroup;//拥堵重算31 private RadioGroup mTrafficGroup;//交通播报32 private RadioGroup mCameraGroup;//摄像头播报33 private RadioGroup mScreenGroup;//屏幕常亮34 35 private boolean mDayNightFlag Utils.DAY_MODE;36 private boolean mDeviationFlag Utils.YES_MODE;37 private boolean mJamFlag Utils.YES_MODE;38 private boolean mTrafficFlag Utils.OPEN_MODE;39 private boolean mCameraFlag Utils.OPEN_MODE;40 private boolean mScreenFlag Utils.YES_MODE;41 private int mThemeStyle;42 43 protected void onCreate(Bundle savedInstanceState) {44 super.onCreate(savedInstanceState);45 setContentView(R.layout.activity_navisetting);46 Bundle bundlegetIntent().getExtras();47 processBundle(bundle);48 initView();49 initListener();50 }51 52 53 /**54 * 初始化控件55 */56 private void initView() {57 mBackView (ImageView) findViewById(R.id.setting_back_image);58 mDayNightGroup (RadioGroup) findViewById(R.id.day_night_group);59 mDeviationGroup (RadioGroup) findViewById(R.id.deviation_group);60 mJamGroup (RadioGroup) findViewById(R.id.jam_group);61 mTrafficGroup (RadioGroup) findViewById(R.id.traffic_group);62 mCameraGroup (RadioGroup) findViewById(R.id.camera_group);63 mScreenGroup (RadioGroup) findViewById(R.id.screen_group);64 65 }66 67 /**68 * 初始化监听事件69 */70 private void initListener() {71 mBackView.setOnClickListener(this);72 mDayNightGroup.setOnCheckedChangeListener(this);73 mDeviationGroup.setOnCheckedChangeListener(this);74 mJamGroup.setOnCheckedChangeListener(this);75 mTrafficGroup.setOnCheckedChangeListener(this);76 mCameraGroup.setOnCheckedChangeListener(this);77 mScreenGroup.setOnCheckedChangeListener(this);78 79 }80 81 /**82 * 根据导航界面传过来的数据设置当前界面的显示状态83 */84 private void setViewContent() {85 if (mDayNightGroup null) {86 return;87 }88 if (mDayNightFlag) {89 mDayNightGroup.check(R.id.nightradio);90 } else {91 mDayNightGroup.check(R.id.dayratio);92 }93 if (mDeviationFlag) {94 mDeviationGroup.check(R.id.deviationyesradio);95 } else {96 mDeviationGroup.check(R.id.deviationnoradio);97 }98 99 if (mJamFlag) { 100 mJamGroup.check(R.id.jam_yes_radio); 101 } else { 102 mJamGroup.check(R.id.jam_no_radio); 103 } 104 105 if (mTrafficFlag) { 106 mTrafficGroup.check(R.id.trafficyesradio); 107 } else { 108 mTrafficGroup.check(R.id.trafficnoradio); 109 } 110 111 if (mCameraFlag) { 112 mCameraGroup.check(R.id.camerayesradio); 113 } else { 114 mCameraGroup.check(R.id.cameranoradio); 115 } 116 117 if (mScreenFlag) { 118 mScreenGroup.check(R.id.screenonradio); 119 } else { 120 mScreenGroup.check(R.id.screenoffradio); 121 } 122 } 123 124 /** 125 * 处理具体的bundle 126 * param bundle 127 */ 128 private void processBundle(Bundle bundle) { 129 if (bundle ! null) { 130 mThemeStyle bundle.getInt(Utils.THEME, 131 AMapNaviViewOptions.DEFAULT_COLOR_TOPIC); 132 mDayNightFlag bundle.getBoolean(Utils.DAY_NIGHT_MODE); 133 mDeviationFlag bundle.getBoolean(Utils.DEVIATION); 134 mJamFlag bundle.getBoolean(Utils.JAM); 135 mTrafficFlag bundle.getBoolean(Utils.TRAFFIC); 136 mCameraFlag bundle.getBoolean(Utils.CAMERA); 137 mScreenFlag bundle.getBoolean(Utils.SCREEN); 138 139 } 140 } 141 142 /** 143 * 根据当前界面的设置设置构建bundle 144 * return 145 */ 146 private Bundle getBundle() { 147 Bundle bundle new Bundle(); 148 bundle.putBoolean(Utils.DAY_NIGHT_MODE, mDayNightFlag); 149 bundle.putBoolean(Utils.DEVIATION, mDeviationFlag); 150 bundle.putBoolean(Utils.JAM, mJamFlag); 151 bundle.putBoolean(Utils.TRAFFIC, mTrafficFlag); 152 bundle.putBoolean(Utils.CAMERA, mCameraFlag); 153 bundle.putBoolean(Utils.SCREEN, mScreenFlag); 154 bundle.putInt(Utils.THEME, mThemeStyle); 155 return bundle; 156 } 157 158 // 事件处理方法 159 Override 160 public void onClick(View v) { 161 switch (v.getId()) { 162 case R.id.setting_back_image: 163 164 Intent intent new Intent(NaviSettingActivity.this, 165 NaviCustomActivity.class); 166 intent.putExtras(getBundle()); 167 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 168 startActivity(intent); 169 finish(); 170 break; 171 } 172 173 } 174 175 176 /** 177 * 返回键监听 178 * */ 179 Override 180 public boolean onKeyDown(int keyCode, KeyEvent event) { 181 182 if (keyCode KeyEvent.KEYCODE_BACK) { 183 Intent intent new Intent(NaviSettingActivity.this, 184 NaviCustomActivity.class); 185 intent.putExtras(getBundle()); 186 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 187 startActivity(intent); 188 finish(); 189 190 } 191 return super.onKeyDown(keyCode, event); 192 } 193 194 // ------------------------------生命周期重写方法--------------------------- 195 196 Override 197 public void onResume() { 198 // TODO Auto-generated method stub 199 super.onResume(); 200 setViewContent(); 201 } 202 203 Override 204 public void onCheckedChanged(RadioGroup group, int checkedId) { 205 switch (checkedId) { 206 // 昼夜模式 207 case R.id.dayratio: 208 mDayNightFlag Utils.DAY_MODE; 209 break; 210 case R.id.nightradio: 211 mDayNightFlag Utils.NIGHT_MODE; 212 break; 213 // 偏航重算 214 case R.id.deviationyesradio: 215 mDeviationFlag Utils.YES_MODE; 216 break; 217 case R.id.deviationnoradio: 218 mDeviationFlag Utils.NO_MODE; 219 break; 220 // 拥堵重算 221 case R.id.jam_yes_radio: 222 mJamFlag Utils.YES_MODE; 223 break; 224 case R.id.jam_no_radio: 225 mJamFlag Utils.NO_MODE; 226 break; 227 // 交通播报 228 case R.id.trafficyesradio: 229 mTrafficFlag Utils.OPEN_MODE; 230 break; 231 case R.id.trafficnoradio: 232 mTrafficFlag Utils.CLOSE_MODE; 233 break; 234 // 摄像头播报 235 case R.id.camerayesradio: 236 mCameraFlag Utils.OPEN_MODE; 237 break; 238 case R.id.cameranoradio: 239 mCameraFlag Utils.CLOSE_MODE; 240 break; 241 // 屏幕常亮 242 case R.id.screenonradio: 243 mScreenFlag Utils.YES_MODE; 244 break; 245 case R.id.screenoffradio: 246 mScreenFlag Utils.NO_MODE; 247 break; 248 } 249 250 } 251 } View Code 以上就差不多实现了导航的基本功能后面开始分享地点搜索并且获得搜索点的经纬度 第八步兴趣点搜索地理编码步行规划只是使用简单的兴趣点搜索勿喷另外我这里只是使用了步行导航如果需要驾车导航以及公交导航可以去调用相类似的方法 首先需要在高德API官方网站下载搜索服务的jar包至于在哪里可以自己去查看下载了这么多包了应该知道怎么找了 添加包之后就可以写代码了以下是我的RoutePlanningActivity的布局文件 1 ?xml version1.0 encodingutf-8?2 RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/android3 android:layout_widthmatch_parent4 android:layout_heightmatch_parent 5 6 com.amap.api.maps.MapView7 android:idid/map8 android:layout_widthmatch_parent9 android:layout_heightmatch_parent / 10 11 LinearLayout 12 android:layout_widthmatch_parent 13 android:layout_heightwrap_content 14 android:orientationvertical 15 16 LinearLayout 17 android:layout_widthfill_parent 18 android:layout_heightmatch_parent 19 android:orientationhorizontal 20 AutoCompleteTextView 21 android:idid/startPlace 22 android:layout_widthmatch_parent 23 android:layout_heightwrap_content 24 android:layout_weight2 25 android:hint起点 26 android:text天虹商场 / 27 Button 28 android:idid/addStartPlace 29 android:layout_widthmatch_parent 30 android:layout_heightwrap_content 31 android:layout_weight4 32 android:text添加起点/ 33 /LinearLayout 34 35 LinearLayout 36 android:layout_widthfill_parent 37 android:layout_heightmatch_parent 38 android:orientationhorizontal 39 AutoCompleteTextView 40 android:idid/endPlace 41 android:layout_widthmatch_parent 42 android:layout_heightwrap_content 43 android:layout_weight2 44 android:hint终点 45 android:text上沙村 / 46 Button 47 android:idid/addEndPlace 48 android:layout_widthmatch_parent 49 android:layout_heightwrap_content 50 android:layout_weight4 51 android:text添加终点/ 52 /LinearLayout 53 54 Button 55 android:idid/searchBtn 56 android:layout_widthmatch_parent 57 android:layout_heightwrap_content 58 android:text搜索/ 59 60 /LinearLayout 61 62 /RelativeLayout View Code 然后就是RoutePlanningActivity的实现代码了 1 package com.oysd.activity;2 3 import java.util.ArrayList;4 import java.util.List;5 6 import com.amap.api.maps.AMap;7 import com.amap.api.maps.MapView;8 import com.amap.api.maps.overlay.WalkRouteOverlay;9 import com.amap.api.services.core.AMapException;10 import com.amap.api.services.core.LatLonPoint;11 import com.amap.api.services.geocoder.GeocodeQuery;12 import com.amap.api.services.geocoder.GeocodeResult;13 import com.amap.api.services.geocoder.GeocodeSearch;14 import com.amap.api.services.geocoder.GeocodeSearch.OnGeocodeSearchListener;15 import com.amap.api.services.geocoder.RegeocodeResult;16 import com.amap.api.services.help.Inputtips;17 import com.amap.api.services.help.Tip;18 import com.amap.api.services.poisearch.PoiSearch;19 import com.amap.api.services.route.BusRouteResult;20 import com.amap.api.services.route.DriveRouteResult;21 import com.amap.api.services.route.RouteSearch;22 import com.amap.api.services.route.RouteSearch.OnRouteSearchListener;23 import com.amap.api.services.route.WalkPath;24 import com.amap.api.services.route.WalkRouteResult;25 import com.oysd.ouyangmap.R;26 27 import android.app.Activity;28 import android.app.ProgressDialog;29 import android.os.Bundle;30 import android.text.Editable;31 import android.text.TextWatcher;32 import android.view.View;33 import android.view.View.OnClickListener;34 import android.widget.ArrayAdapter;35 import android.widget.AutoCompleteTextView;36 import android.widget.Button;37 import android.widget.EditText;38 import android.widget.Toast;39 40 public class RoutePlanningActivity extends Activity implements41 OnRouteSearchListener, OnGeocodeSearchListener, OnClickListener{42 43 private MapView mMapView;44 private AMap mAMap;45 46 private AutoCompleteTextView startPlace;// 起点47 private AutoCompleteTextView endPlace;// 终点48 private Button searchBtn;// 搜索按钮49 50 private Button addStartPlaceBtn;51 private Button addEndPlaceBtn;52 private boolean isStart;53 private boolean isEnd;54 private GeocodeSearch mGeocodeSearch;55 // 搜索时进度条56 private ProgressDialog progDialog null;57 private String strStart;58 private String strEnd;59 private LatLonPoint startPoint null;60 private LatLonPoint endPoint null;61 private PoiSearch.Query startSearchQuery;62 private PoiSearch.Query endSearchQuery;63 64 private int walkMode RouteSearch.WalkDefault;// 步行默认模式65 private RouteSearch routeSearch;66 67 Override68 protected void onCreate(Bundle savedInstanceState) {69 // TODO Auto-generated method stub70 super.onCreate(savedInstanceState);71 setContentView(R.layout.activity_routeplanning);72 mMapView (MapView) findViewById(R.id.map);73 mMapView.onCreate(savedInstanceState);74 initAMap();75 findViewById();76 }77 78 /**79 * 初始化AMap对象80 */81 private void initAMap() {82 if (mAMap null) {83 mAMap mMapView.getMap();84 }85 mGeocodeSearch new GeocodeSearch(this);86 mGeocodeSearch.setOnGeocodeSearchListener(this);87 88 }89 90 /**91 * 获取控件92 */93 private void findViewById() {94 startPlace (AutoCompleteTextView) findViewById(R.id.startPlace);95 endPlace (AutoCompleteTextView) findViewById(R.id.endPlace);96 searchBtn (Button) findViewById(R.id.searchBtn);97 addEndPlaceBtn (Button) findViewById(R.id.addEndPlace);98 addStartPlaceBtn (Button) findViewById(R.id.addStartPlace);99 100 setListener(); 101 } 102 103 /** 104 * 设置监听 105 */ 106 private void setListener() { 107 108 searchBtn.setOnClickListener(this); 109 addStartPlaceBtn.setOnClickListener(this); 110 addEndPlaceBtn.setOnClickListener(this); 111 startPlace.addTextChangedListener(this.startPlaceWatch); 112 endPlace.addTextChangedListener(this.endPlaceWatch); 113 } 114 115 TextWatcher startPlaceWatch new TextWatcher() { 116 117 Override 118 public void onTextChanged(CharSequence s, int start, int before, int count) { 119 // TODO Auto-generated method stub 120 String newText s.toString().trim(); 121 Inputtips inputTips new Inputtips(RoutePlanningActivity.this, 122 new Inputtips.InputtipsListener() { 123 Override 124 public void onGetInputtips(ListTip tipList, int rCode) { 125 if (rCode 0) {// 正确返回 126 ListString listString new ArrayListString(); 127 for (int i 0; i tipList.size(); i) { 128 listString.add(tipList.get(i).getName()); 129 } 130 ArrayAdapterString aAdapter new ArrayAdapterString(RoutePlanningActivity.this,android.R.layout.simple_list_item_1, listString); 131 startPlace.setAdapter(aAdapter); 132 aAdapter.notifyDataSetChanged(); 133 } 134 } 135 }); 136 try { 137 // 第一个参数表示提示关键字第二个参数默认代表全国也可以为城市区号 138 inputTips.requestInputtips(newText,null); 139 } catch (AMapException e) { 140 e.printStackTrace(); 141 } 142 } 143 144 Override 145 public void beforeTextChanged(CharSequence s, int start, int count, 146 int after) { 147 // TODO Auto-generated method stub 148 149 } 150 151 Override 152 public void afterTextChanged(Editable s) { 153 // TODO Auto-generated method stub 154 155 } 156 }; 157 158 TextWatcher endPlaceWatch new TextWatcher() { 159 160 Override 161 public void onTextChanged(CharSequence s, int start, int before, int count) { 162 // TODO Auto-generated method stub 163 String newText s.toString().trim(); 164 Inputtips inputTips new Inputtips(RoutePlanningActivity.this, 165 new Inputtips.InputtipsListener() { 166 Override 167 public void onGetInputtips(ListTip tipList, int rCode) { 168 if (rCode 0) {// 正确返回 169 ListString listString new ArrayListString(); 170 for (int i 0; i tipList.size(); i) { 171 listString.add(tipList.get(i).getName()); 172 } 173 ArrayAdapterString aAdapter new ArrayAdapterString(RoutePlanningActivity.this,android.R.layout.simple_list_item_2, listString); 174 startPlace.setAdapter(aAdapter); 175 aAdapter.notifyDataSetChanged(); 176 } 177 } 178 }); 179 try { 180 // 第一个参数表示提示关键字第二个参数默认代表全国也可以为城市区号 181 inputTips.requestInputtips(newText,null); 182 } catch (AMapException e) { 183 e.printStackTrace(); 184 } 185 } 186 187 Override 188 public void beforeTextChanged(CharSequence s, int start, int count, 189 int after) { 190 // TODO Auto-generated method stub 191 192 } 193 194 Override 195 public void afterTextChanged(Editable s) { 196 // TODO Auto-generated method stub 197 198 } 199 }; 200 201 /** 202 * 显示进度框 203 */ 204 private void showProgressDialog() { 205 if (progDialog null) 206 progDialog new ProgressDialog(this); 207 progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 208 progDialog.setIndeterminate(false); 209 progDialog.setCancelable(false); 210 progDialog.setMessage(正在规划:\n); 211 progDialog.show(); 212 } 213 214 /** 215 * 隐藏进度框 216 */ 217 private void dissmissProgressDialog() { 218 if (progDialog ! null) { 219 progDialog.dismiss(); 220 } 221 } 222 223 Override 224 public void onBusRouteSearched(BusRouteResult arg0, int arg1) { 225 // TODO Auto-generated method stub 226 227 } 228 229 Override 230 public void onDriveRouteSearched(DriveRouteResult arg0, int arg1) { 231 // TODO Auto-generated method stub 232 233 } 234 235 Override 236 public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int rCode) { 237 // TODO Auto-generated method stub 238 dissmissProgressDialog(); 239 if (rCode 0) { 240 if (walkRouteResult ! null walkRouteResult.getPaths() ! null 241 walkRouteResult.getPaths().size() 0) { 242 WalkPath walkPath walkRouteResult.getPaths().get(0); 243 244 mAMap.clear();// 清理之前的图标 245 WalkRouteOverlay walkRouteOverlay new WalkRouteOverlay(this, 246 mAMap, walkPath, walkRouteResult.getStartPos(), 247 walkRouteResult.getTargetPos()); 248 walkRouteOverlay.removeFromMap(); 249 walkRouteOverlay.addToMap(); 250 walkRouteOverlay.zoomToSpan(); 251 } else { 252 dissmissProgressDialog();// 隐藏对话框 253 Toast.makeText(RoutePlanningActivity.this, 没有搜索到结果, 254 Toast.LENGTH_SHORT).show(); 255 } 256 } else { 257 dissmissProgressDialog();// 隐藏对话框 258 Toast.makeText(RoutePlanningActivity.this, 网络错误, 259 Toast.LENGTH_SHORT).show(); 260 } 261 } 262 263 Override 264 public void onGeocodeSearched(GeocodeResult geocodeResult, int rCode) { 265 // TODO Auto-generated method stub 266 if (rCode 0) { 267 if (geocodeResult ! null 268 geocodeResult.getGeocodeAddressList() ! null 269 geocodeResult.getGeocodeAddressList().size() 0) { 270 LatLonPoint latLonPoint geocodeResult.getGeocodeAddressList() 271 .get(0).getLatLonPoint(); 272 if (isStart) { 273 startPoint new LatLonPoint(latLonPoint.getLatitude(), 274 latLonPoint.getLongitude()); 275 Toast.makeText(RoutePlanningActivity.this, 加入起点成功, 276 Toast.LENGTH_SHORT).show(); 277 } else if (isEnd) { 278 endPoint new LatLonPoint(latLonPoint.getLatitude(), 279 latLonPoint.getLongitude()); 280 Toast.makeText(RoutePlanningActivity.this, 加入终点成功, 281 Toast.LENGTH_SHORT).show(); 282 } 283 } else { 284 Toast.makeText(RoutePlanningActivity.this, 没有结果, 285 Toast.LENGTH_SHORT).show(); 286 } 287 288 } else { 289 Toast.makeText(RoutePlanningActivity.this, 网络连接失败, 290 Toast.LENGTH_SHORT).show(); 291 } 292 } 293 294 Override 295 public void onRegeocodeSearched(RegeocodeResult arg0, int arg1) { 296 // TODO Auto-generated method stub 297 298 } 299 300 Override 301 public void onClick(View v) { 302 // TODO Auto-generated method stub 303 switch(v.getId()){ 304 case R.id.searchBtn: 305 doSearch(); 306 break; 307 case R.id.addStartPlace: 308 addStartPlace(); 309 break; 310 case R.id.addEndPlace: 311 addEndPlace(); 312 break; 313 } 314 } 315 316 /** 317 * 执行搜索功能 318 */ 319 private void doSearch(){ 320 showProgressDialog();// 显示进度框 321 RouteSearch.FromAndTo fromAndto new RouteSearch.FromAndTo( 322 startPoint, endPoint); 323 routeSearch new RouteSearch(RoutePlanningActivity.this); 324 routeSearch.setRouteSearchListener(RoutePlanningActivity.this); 325 RouteSearch.WalkRouteQuery query new RouteSearch.WalkRouteQuery( 326 fromAndto, walkMode); 327 routeSearch.calculateWalkRouteAsyn(query); 328 } 329 330 /** 331 * 执行添加起点操作功能 332 */ 333 private void addStartPlace(){ 334 335 isStart true; 336 isEnd false; 337 addPoint(startPlace.getText().toString().trim()); 338 } 339 340 341 /** 342 * 执行添加终点操作功能 343 */ 344 private void addEndPlace(){ 345 isStart false; 346 isEnd true; 347 addPoint(endPlace.getText().toString().trim()); 348 } 349 350 private void addPoint(String address){ 351 352 // 第一个参数表示地址第二个参数表示查询城市中文或者中文全拼citycode、adcode 353 GeocodeQuery query new GeocodeQuery(address, 深圳); 354 mGeocodeSearch.getFromLocationNameAsyn(query); 355 } 356 357 } View Code 不过这里面使用了AutoCompleteTextView 来实现输入提示里面有一点点的问题我这里有输入起点与终点 输入起点的时候会有输入提示但是输入终点就没有任何提示自己也是不知道问题出在哪里若有大神飘过还请帮我解惑   到这里 这个高德地图的简单功能开发算是分享得差不多了。 其实高德地图、百度地图、谷歌地图这些的开发都大同小异还是需要认真查看API文档 如果可能的话完全可以在自己的手机上安装一个属于自己的私人地图想要什么功能自己往里面添加自己怎么用的方便怎么用。。。。转载于:https://www.cnblogs.com/ouyangduoduo/p/4623680.html
http://www.zqtcl.cn/news/947024/

相关文章:

  • 河北手机版建站系统价格微信怎么开店铺小程序
  • 中国建设教育网官网是什么网站潮州seo建站
  • 如何做个购物网站学校网站设计的目的
  • 建设部网站158号文件1688官网app
  • 临沂科技网站建设在线网页截图工具
  • 聊城网站推广软件简单网页制作训练
  • wordpress去除文章作者seo核心技术排名
  • 网站建设黄页免费观看wordpress所有文章
  • 企业整站优化沈阳建设学院
  • 网站怎么做弹框河北省建设注册中心网站首页
  • 大连哪里有手机自适应网站建设网站开发层次
  • 网站首页的浮窗怎么做美食网站程序
  • 淮北网站建设建设银行福州分行招聘网站
  • c 网站开发 pdf济南集团网站建设报价
  • 做网站找哪家公司好中国网络优化推广
  • 创建网站目录结构应遵循的方法dz旅游网站模板
  • 我看别人做系统就直接网站下载软件外贸物流流程
  • 手机微信网站南县网站定制
  • 做字幕网站重庆seo代理价格
  • 长春公司做网站找哪个公司好英文网站google推广
  • 潍坊网站建设方案推广官方网站如何建设
  • 设计网站的公司名称苏州建设人才网官网
  • 河南网站推广优化公司wordpress搭建vip下载站
  • 做网站拉客户有效吗网络宣传渠道
  • 制作深圳网站建设四川广安网站建设
  • 网站服务器服务商wordpress特效主题
  • 大型大型网站制作wordpress产品相册
  • 古董做推广哪个网站好租空间开网站
  • 巴中网站建设开发公司网站上传在空间哪里
  • 哈尔滨网站建设赚钱么宁波大型网站制作