在学校最近做了一个小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调动高德地图直接导航的简单实例,希望大家多多交流,共同进步。