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调动高德地图直接导航的简单实例,希望大家多多交流,共同进步。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
View.OnClickListener onClickListener=new View.OnClickListener() { @Override public void onClick(View view) { switch (view.getId()) { case R.id.baidu_btn: if (MDMUtil.appIsInstalled( getContext(),"com.baidu.BaiduMap")) {//传入指定应用包名 try { double[] gd_lat_lon ; if(RoutingXModel.isGpslatlon){ gd_lat_lon= gaoDeToBaidu(xModel.poc_lon,xModel.poc_lat); }else{ gd_lat_lon= new double[2]; gd_lat_lon[0]=xModel.poc_lon; gd_lat_lon[1]=xModel.poc_lat; } Intent intent = Intent.getIntent("intent://map/direction?" + "destination=latlng:" + gd_lat_lon[1] + "," + gd_lat_lon[0]+ "|name:我的目的地" + //终点 "&mode=driving&" + //导航路线方式 "&src=appname#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getContext().startActivity(intent); //启动调用 } catch (URISyntaxException e) { Log.e("intent", e.getMessage()); } } else {//未安装 //market为路径,id为包名 //显示手机上所有的market商店 Toast.makeText(getContext(), "您尚未安装百度地图", Toast.LENGTH_LONG).show(); Uri uri = Uri.parse("market://details?id=com.baidu.BaiduMap"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); if (intent.resolveActivity(getContext().getPackageManager()) != null){ getContext().startActivity(intent); } } dismiss(); break; case R.id.gaode_btn: if (MDMUtil.appIsInstalled( getContext(),"com.autonavi.minimap")) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); double[] gd_lat_lon ; if(!RoutingXModel.isGpslatlon){ gd_lat_lon= bdToGaoDe(xModel.poc_lat,xModel.poc_lon); }else{ gd_lat_lon= new double[2]; gd_lat_lon[0]=xModel.poc_lon; gd_lat_lon[1]=xModel.poc_lat; } //将功能Scheme以URI的方式传入data Uri uri = Uri.parse("androidamap://navi?sourceApplication=appname&poiname=fangheng&lat;=" + gd_lat_lon[1] + "&lon;=" + gd_lat_lon[0] + "&dev=0&style=4"); intent.setData(uri); //启动该页面即可 getContext().startActivity(intent); } else { Toast.makeText(getContext(), "您尚未安装高德地图", Toast.LENGTH_LONG).show(); Uri uri = Uri.parse("market://details?id=com.autonavi.minimap"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); if (intent.resolveActivity(getContext().getPackageManager()) != null){ getContext().startActivity(intent); } } dismiss(); break; case R.id.tencent_btn: Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); double[] gd_lat_lon ; if(!RoutingXModel.isGpslatlon){ gd_lat_lon= bdToGaoDe(xModel.poc_lat,xModel.poc_lon); }else{ gd_lat_lon= new double[2]; gd_lat_lon[0]=xModel.poc_lon; gd_lat_lon[1]=xModel.poc_lat; } //将功能Scheme以URI的方式传入data Uri uri = Uri.parse("qqmap://map/routeplan?type=drive&to;=我的目的地&tocoord;=" + gd_lat_lon[1]+ "," + gd_lat_lon[0]); intent.setData(uri); if (intent.resolveActivity(getContext().getPackageManager()) != null) { //启动该页面即可 getContext().startActivity(intent); } else { Toast.makeText(getContext(), "您尚未安装腾讯地图", Toast.LENGTH_LONG).show(); } dismiss(); break; case R.id.cancel_btn2: dismiss(); break; } } };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值