안 드 로 이 드 는 포 지 셔 닝 과 목적지 의 네 비게 이 션 예제 코드 를 실현 합 니 다.

11944 단어 android포 지 셔 닝
오늘 은 무심결에 기술 대신 이 바 이 두 지 도 를 이용 해 포 지 셔 닝 하고 목적지 내 비게 이 션 을 실현 하 는 데 모 를 보 았 다.좋 은 것 같 으 면 옮 겨 서 같이 공유 합 시다.다음은 실현 효 과 를 보 겠 습 니 다.
这里写图片描述       这里写图片描述  
들 어가 면 먼저 현재 위 치 를 얻 을 수 있 습 니 다.지도 에 표 시 됩 니 다.입력 상자 에 목적 지 를 입력 하면 지도 에 가장 좋 은 노선 이 나타 납 니 다.제 가 설치 한 것 은 거리 가 가장 작은 운전 노선 입 니 다.또한 버스 노선,보행 노선 도 있 고 코드 에 상세 한 설명 이 있 습 니 다.또한 콘 솔 에 서 는 선로 의 모든 노드 의 정보 와 시작 위치 와 목적지 의 거 리 를 출력 하고 정 보 는 현재 노드 의 네 비게 이 션 정 보 를 나타 낸다.다음 그림:
这里写图片描述  
다음은 어떻게 실현 되 는 지 살 펴 보 겠 습 니 다.먼저 바 이 두 개발 자 계 정 을 등록 하고 바 이 두 맵 API 에 들 어가 관련 자 료 를 조회 한 다음 에 지도 에 가입 해 야 하 는 응용 프로그램 을 위해 APP KEY 를 등록 한 다음 에 바 이 두 맵 jar 파일 을 다운로드 하고 새로 만 든 프로젝트 를 가 져 오 면 됩 니 다.다음은 구체 적 인 코드 를 실현 하 는 것 을 보고 코드 에 상세 한 설명 이 있 습 니 다.

public class NavigationDemoActivity extends MapActivity { 
  private String mMapKey = "     key"; 
  private EditText destinationEditText = null; 
  private Button startNaviButton = null; 
  private MapView mapView = null; 
  private BMapManager mMapManager = null; 
  private MyLocationOverlay myLocationOverlay = null; 
  //onResume    listener,onPause   Remove,   listener  Android   ,   API   
  private LocationListener locationListener; 
  private MKSearch searchModel; 
  GeoPoint pt; 

  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.main); 
    destinationEditText = (EditText) this.findViewById(R.id.et_destination); 
    startNaviButton = (Button) this.findViewById(R.id.btn_navi); 

    mMapManager = new BMapManager(getApplication()); 
    mMapManager.init(mMapKey, new MyGeneralListener()); 
    super.initMapActivity(mMapManager); 

    mapView = (MapView) this.findViewById(R.id.bmapsView); 
    //            
    mapView.setBuiltInZoomControls(true);  
    //             overlay,       
//    mapView.setDrawOverlayWhenZooming(true); 
    //        
    myLocationOverlay = new MyLocationOverlay(this, mapView); 
    //                
    mapView.getOverlays().add(myLocationOverlay); 

    //        
    locationListener = new LocationListener(){ 

      @Override 
      public void onLocationChanged(Location location) { 
        if (location != null){ 
          //  GEO                     
           pt = new GeoPoint((int)(location.getLatitude()*1e6), 
              (int)(location.getLongitude()*1e6)); 
//         System.out.println("---"+location.getLatitude() +":"+location.getLongitude()); 
          mapView.getController().animateTo(pt); 
        } 
      } 
    }; 

    //        
    searchModel = new MKSearch(); 
    //            
    searchModel.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST); 
    searchModel.init(mMapManager, new MKSearchListener() { 
      //           
      @Override 
      public void onGetDrivingRouteResult(MKDrivingRouteResult res, int error) { 
        //       MKEvent     
        if (error != 0 || res == null) { 
          Toast.makeText(NavigationDemoActivity.this, "  ,     ", Toast.LENGTH_SHORT).show(); 
          return; 
        } 
        RouteOverlay routeOverlay = new RouteOverlay(NavigationDemoActivity.this, mapView); 

        //               
        MKRoute route = res.getPlan(0).getRoute(0); 
        int distanceM = route.getDistance(); 
        String distanceKm = String.valueOf(distanceM / 1000) +"."+String.valueOf(distanceM % 1000); 
        System.out.println("  :"+distanceKm+"  ---    :"+route.getNumSteps()); 
        for (int i = 0; i < route.getNumSteps(); i++) { 
          MKStep step = route.getStep(i); 
          System.out.println("    :"+step.getContent()); 
        } 
        routeOverlay.setData(route); 
        mapView.getOverlays().clear(); 
        mapView.getOverlays().add(routeOverlay); 
        mapView.invalidate(); 
        mapView.getController().animateTo(res.getStart().pt); 
      } 

      //                     
      @Override 
      public void onGetWalkingRouteResult(MKWalkingRouteResult res, int error) { 
        //       
      } 

      @Override 
      public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) { 
        //       
      } 

      @Override 
      public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) { 
      } 
      @Override 
      public void onGetAddrResult(MKAddrInfo arg0, int arg1) { 
      } 
      @Override 
      public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) { 
      } 
      @Override 
      public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) { 
      } 
    }); 

    startNaviButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
        String destination = destinationEditText.getText().toString(); 

        //     (    ) 
        MKPlanNode startNode = new MKPlanNode(); 
        startNode.pt = pt; 
        //      
        MKPlanNode endNode = new MKPlanNode();  
        endNode.name = destination; 

        //        
        String city = getResources().getString(R.string.beijing); 
//       System.out.println("----"+city+"---"+destination+"---"+pt); 
        searchModel.drivingSearch(city, startNode, city, endNode); 
        //     
//       searchModel.walkingSearch(city, startNode, city, endNode); 
        //     
//       searchModel.transitSearch(city, startNode, endNode); 
      } 
    }); 

  } 

  @Override 
  protected void onResume() { 
    mMapManager.getLocationManager().requestLocationUpdates(locationListener); 
    myLocationOverlay.enableMyLocation(); 
    myLocationOverlay.enableCompass(); //       
    mMapManager.start(); 
    super.onResume(); 
  } 

  @Override 
  protected void onPause() { 
    mMapManager.getLocationManager().removeUpdates(locationListener); 
    myLocationOverlay.disableMyLocation();//       
    myLocationOverlay.disableCompass(); //       
    mMapManager.stop(); 
    super.onPause(); 
  } 

  @Override 
  protected boolean isRouteDisplayed() { 
    // TODO Auto-generated method stub 
    return false; 
  } 

  //       ,           ,        
  class MyGeneralListener implements MKGeneralListener { 
      @Override 
      public void onGetNetworkState(int iError) { 
        Log.d("MyGeneralListener", "onGetNetworkState error is "+ iError); 
        Toast.makeText(NavigationDemoActivity.this, "       !", 
            Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onGetPermissionState(int iError) { 
        Log.d("MyGeneralListener", "onGetPermissionState error is "+ iError); 
        if (iError == MKEvent.ERROR_PERMISSION_DENIED) { 
          //   Key  : 
          Toast.makeText(NavigationDemoActivity.this,  
              "  BMapApiDemoApp.java         Key!", 
              Toast.LENGTH_LONG).show(); 
        } 
      } 
    } 
} 
다음 레이아웃 파일:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  android:orientation="vertical" > 

  <LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="18sp" 
      android:text="Destination:" /> 

    <EditText 
      android:id="@+id/et_destination" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 
  </LinearLayout> 

  <Button  
    android:id="@+id/btn_navi" 
    android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Start navigate"/> 

  <com.baidu.mapapi.MapView 
    android:id="@+id/bmapsView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:clickable="true" /> 

</LinearLayout> 
AndroidMainifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  package="com.ericssonlabs" 
  android:versionCode="1" 
  android:versionName="1.0" > 

  <uses-sdk android:minSdkVersion="8" /> 

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> 
  <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>  
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>  
  <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 

  <supports-screens android:largeScreens="true" 
    android:normalScreens="true" android:smallScreens="true" 
    android:resizeable="true" android:anyDensity="true"/> 
  <uses-sdk android:minSdkVersion="3"></uses-sdk> 

  <application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
      android:name=".NavigationDemoActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 

        <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
    </activity> 
  </application> 

</manifest> 
위 에는 바 이 두 지도 포 지 셔 닝 과 목적지 내 비게 이 션 을 실현 하 는 모든 코드 가 있 습 니 다.원 하 시 는 건 지 모 르 겠 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기