Android调用高德地图直接导航的简单实例

在学校最近做了一个小APP,脑子笨怕忘,写个博客记录一下。
简单来说就是保存地点,然后单击直接打开高德地图APP并从当前所在地导航到保存的地点。因为是小型学习用的,所以保存地点采用了Android本地数据库进行数据保存。废话不多,直接开始。
首先,把要做的事情捋顺了。1.要保存当前地点必须要通过定位,定位的方式我选择的也是高德定位,因为个人觉得这个信号好。2.定位必须获得权限,定位的权限以及网络权限,因为通过高德定位需要网络。3.保存数据到本地数据库,第一次使用通过判断来建表。4.调用高德地图,需要先判断手机是否安装高德地图。然后,直接把保存的地点(经纬度)传进去直接开始导航。
清楚要做的事之后直接上代码,代码中有大量注释。

引入高德定位需要Android_Location_V1.1.2.jar包
private LocationManagerProxy gaodeManager;
public static double NowLongitude;
public static double NowLatitude;
private void startGaode() {
		gaodeManager = LocationManagerProxy.getInstance(this);
		/*
		 * mAMapLocManager.setGpsEnable(false);
		 * 1.0.2版本新增方法,设置true表示混合定位中包含gps定位,false表示纯网络定位,默认是true Location
		 * API定位采用GPS和网络混合定位方式
		 * ,第一个参数是定位provider,第二个参数时间最短是2000毫秒,第三个参数距离间隔单位是米,第四个参数是定位监听者
		 */
		gaodeManager.requestLocationUpdates(LocationProviderProxy.AMapNetwork,
				2000, 10, mAMapLocationListener);
	}

	private void stopAmap() {
		if (gaodeManager != null) {
			gaodeManager.removeUpdates(mAMapLocationListener);
			gaodeManager.destory();
		}
		gaodeManager = null;
	}

	// 给高德位置信息设置监听
	private AMapLocationListener mAMapLocationListener = new AMapLocationListener() {

		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {

		}

		@Override
		public void onProviderEnabled(String provider) {

		}

		@Override
		public void onProviderDisabled(String provider) {

		}

		@Override
		public void onLocationChanged(Location location) {

		}

		@Override
		public void onLocationChanged(AMapLocation location) {
			if (location != null) {
				Double geoLat = location.getLatitude();
				Double geoLng = location.getLongitude();
				String cityCode = "";
				String desc = "";
				CarLongitude = geoLng;
				CarLatitude = geoLat;
				NowLongitude = geoLng;
				NowLatitude = geoLat;
				Bundle locBundle = location.getExtras();
				if (locBundle != null) {
					cityCode = locBundle.getString("citycode");
					desc = locBundle.getString("desc");
				}
				String str = ("定位成功:(" + geoLng + "," + geoLat + ")"
						+ "\n精    度    :" + location.getAccuracy() + "米"
						+ "\n定位方式:" + location.getProvider() + "\n定位时间:"
						+ new Date(location.getTime()).toLocaleString()
						+ "\n城市编码:" + cityCode + "\n位置描述:" + desc + "\n省:"
						+ location.getProvince() + "\n市:" + location.getCity()
						+ "\n区(县):" + location.getDistrict() + "\n区域编码:" + location
						.getAdCode());
				// 经度 维度
				mTextView.setText("高德定位\n" + str);
				mTextView.setTextSize(18);
			}
		}
	};

``
		所需要的权限

	<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" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

	调用高德地图并且传入参数(经纬度)
	
//导航开启
	private void Navigation() { 
		// TODO Auto-generated method stub
		float j, w;
		j = sharedPreferences.getFloat("jingdu", 0);
		w = sharedPreferences.getFloat("weidu", 0);
		try {
			// 高德地图 先维度——后经度
			Intent intent = Intent
					.getIntent("androidamap://route?sourceApplication=softname&slat="
							+ NowLatitude
							+ "&slon="
							+ NowLongitude
							+ "&sname="
							+ "当前位置"
							+ "&dlat="
							+ w
							+ "&dlon="
							+ j
							+ "&dname="
							+ "车的位置" + "&dev=0&m=0&t=1");
			if (isInstallByread("com.autonavi.minimap")) {
				startActivity(intent);
				Toast toast = Toast.makeText(this, "高德地图正在启动", 3000);
				toast.show();
			} else {
				Toast toast = Toast.makeText(this, "高德地图没有安装", 3000);
				toast.show();
				Intent i = new Intent();
			    i.setData(Uri.parse("http://daohang.amap.com/index.php?id=201&CustomID=C021100013023"));
			    i.setAction(Intent.ACTION_VIEW);
			    this.startActivity(i); //启动浏览器
			}
		} catch (URISyntaxException e) {
			e.printStackTrace();
		}

一定要注意,传入参数时高德的规矩是纬度在前,经度在后,切记切记。

以上就是Android调动高德地图直接导航的简单实例,希望大家多多交流,共同进步。

猜你喜欢

转载自blog.csdn.net/qq_38356174/article/details/81435552