這篇文章就主要來講一下集成高德的導航SDK,實現app內導航;這樣就不用調用高德的App了
一、申請key之類的這裏就不說了自己去申請就ok
二、我這下載的SDK如下,只有3D地圖和導航SDK這兩個
三、配置工程導入導航SDK和so庫文件
- 配置
Manifest.xml
添加權限
<!--用於訪問網絡,網絡定位需要上網-->
<uses-permission android:name="android.permission.INTERNET" />
<!--寫入擴展存儲,向擴展卡寫入數據,用於寫入緩存定位數據-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--用於進行網絡定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--獲取運營商信息,用於支持提供運營商信息相關的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--用於訪問GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--用於讀取手機當前的狀態-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--用於訪問wifi網絡信息,wifi信息會用於進行網絡定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--這個權限用於獲取wifi的獲取權限,wifi信息會用來進行網絡定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!--這個權限用於允許程序在手機屏幕關閉後後臺進程仍然運行-->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
- 配置
Manifest.xml
、添加高德SDK的key和導航Activity
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="你申請的KEY" />
<!--導航組件Activity-->
<activity
android:name="com.amap.api.navi.AmapRouteActivity"
android:configChanges="orientation|keyboardHidden|screenSize
android:theme="@android:style/Theme.NoTitleBar" />
四、因爲我這裏沒有需要定製導航的需求所以直接使用高德封裝好的導航組件直接使用
發起導航:給定起點、途經點、終點
- 如果不傳入起點,那麼將會使用當前位置
- 途徑點可以不傳
/**
* 路線規劃
*
* @param slat 起點緯度
* @param slon 起點經度
* @param dlat 終點緯度
* @param dlon 終點經度
*/
public void navigation(Context context, double slat, double slon, double dlat, double dlon) {
Poi start = null;
//如果設置了起點
if (slat != 0 && slon != 0) {
start = new Poi("起點名稱", new LatLng(slat, slon), "");
}
Poi end = new Poi("終點名稱", new LatLng(dlat, dlon), "");
AmapNaviParams params = new AmapNaviParams(start, null, end, AmapNaviType.DRIVER);
params.setUseInnerVoice(true);
params.setMultipleRouteNaviMode(true);
params.setNeedDestroyDriveManagerInstanceWhenNaviExit(true);
//發起導航
AmapNaviPage.getInstance().showRouteActivity(context, params, null);
}
- 具體的參數取值可以前往導航組件—文檔查看
五、來看下實現的效果:首先他會先規劃一下路線然後你就可以發起導航了和使用高德App是一樣的
六、Android調起高德App進行導航也就不行集成SDK,如下:
public class AMapUtil {
/**
* 路線規劃
*
* @param slat 起點緯度
* @param slon 起點經度
* @param dlat 終點緯度
* @param dlon 終點經度
*/
public static void route(Context context, String slat, String slon, String dlat, String dlon) {
if (isInstallApp(context, "com.autonavi.minimap")) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setPackage("com.autonavi.minimap");
String uri = "androidamap://route?" + "sourceApplication=" + context.getString(R.string.app_name);
//如果設置了起點
if (!TextUtils.isEmpty(slat) && !TextUtils.isEmpty(slon)) {
uri += "&slat=" + slat + "&slon=" + slon;
}
uri += "&dlat=" + dlat +
"&dlon=" + dlon +
"&dev=" + 0 +
"&t=" + 0 +
"&t=" + 0;
intent.setData(Uri.parse(uri));
context.startActivity(intent);
} else {
String uri = "https://uri.amap.com/navigation?";
//如果設置了起點
if (!TextUtils.isEmpty(slat) && !TextUtils.isEmpty(slon)) {
uri += "from=" + slon + "," + slat + ",起點";
}
uri += "&to=" + dlon + "," + dlat + ",終點" +
"&mode=car";
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse(uri));
context.startActivity(intent);
}
}
/**
* 檢測應用是否安裝
*/
public static boolean isInstallApp(Context context, String packageName) {
PackageInfo packageInfo;
try {
packageInfo = context.getPackageManager().getPackageInfo(packageName, 0);
} catch (Exception e) {
packageInfo = null;
e.printStackTrace();
}
return packageInfo != null;
}
}