天天看點

android 地圖導航開發思路,基礎功能-導航元件-開發指南-Android 導航SDK | 高德地圖API...

預置條件

請在您工程的 AndroidManifest.xml 中配置聲明導航元件 Activity:

android:name="com.amap.api.navi.AmapRouteActivity"

android:theme="@android:style/Theme.NoTitleBar"

android:configChanges="orientation|keyboardHidden|screenSize|navigation" />

無起終點啟動導航元件

通過AmapNaviPage來啟動導航元件,它是一個單例:

//建構導航元件配置類,沒有傳入起點,是以起點預設為 “我的位置”

AmapNaviParams params = new AmapNaviParams(null, null, null, AmapNaviType.DRIVER, AmapPageType.ROUTE);

//啟動導航元件

AmapNaviPage.getInstance().showRouteActivity(getApplicationContext(), params, null);

傳入起終點啟動導航元件

通過設定起點、途徑點(最多支援三個)、終點啟動導航元件;每個點資料可以通過經緯度、名稱、高德 POIId 來描述,其參數規則如下:經緯度資料為必填參數;

名稱是可選參數僅用于顯示地點名稱,如果設定了名稱參數,會優先顯示所設定的名稱,如果不傳名稱将使用預設值,如“終點”、“途徑點1”;

高德 POIId 是可選參數,但強烈建議傳入,因為其可以有效的減少繞路情況的出現。設定高德 POIId 來啟動導航元件時,将會執行 POI 的精确檢索,獲得 POI 詳情後不僅會輔助算路,也會覆寫傳入的經緯度和名稱兩個參數。

當不設定起點資訊時,會采用使用者目前位置作為起點,并顯示地點名稱為“我的位置”。

//起點

Poi start = new Poi("北京首都機場", new LatLng(40.080525,116.603039), "B000A28DAE");

//途經點

List poiList = new ArrayList();

poiList.add(new Poi("故宮", new LatLng(39.918058,116.397026), "B000A8UIN8"));

//終點

Poi end = new Poi("北京大學", new LatLng(39.941823,116.426319), "B000A816R6");

// 元件參數配置

AmapNaviParams params = new AmapNaviParams(start, poiList, end, AmapNaviType.DRIVER, AmapPageType.ROUTE);

// 啟動元件

AmapNaviPage.getInstance().showRouteActivity(getApplicationContext(), params, null);

退出導航元件

導航元件調起之後,使用者可以點選“路徑規劃頁面”左上角的回退按鈕來退出導航元件,開發者也可以根據需要調用如下函數退出導航元件。

//退出導航元件

AmapNaviPage.getInstance().exitRouteActivity();

導航元件回調方法說明

INaviInfoCallback接口中提供了一系列回調方法,可以實作該接口後,将回調執行個體通過啟動元件方法的最後一個參數傳入,關鍵回調如下(注意:使用導航元件以後,任然可以使用AMapNavi注冊導航回調,監聽更多導航資訊)

void onGetNavigationText(String s);

void onLocationChange(AMapNaviLocation location);

void onExitPage(int pageType);

void onStrategyChanged(int strategy);

View getCustomNaviBottomView();

View getCustomNaviView();

void onMapTypeChanged(int mapType);

View getCustomMiddleView();

void onNaviDirectionChanged(int naviMode);

void onDayAndNightModeChanged(int mode);

void onBroadcastModeChanged(int mode);

void onScaleAutoChanged(boolean enable);