Android唤起手机地图(高德地图,百度地图,腾讯地图,腾讯地图网页)

调用第三方地图软件


前言

最近开发过程中,有个需求是需要调用手机内已经安装的地图软件进行导航,目前国内用户比较多的地图一共也只有三家,分别是

(1)高德地图
(2)百度地图
(3)腾讯地图

该如何调用这些APP呢?如果用户一个APP都没装又该怎么做呢?

判断是否安装了地图软件

1
2
3
4
5
6
7
8
9
10
/**
* 校验是否装了该应用
*
* @param packageName 应用包名
* @return boolean 如果安装了则返回true
*/
private boolean isPackageInstalled(String packageName) {
return new File(Environment.getExternalStorageDirectory().getPath() + packageName)
.exists();
}

自动打开地图

按照高德>腾讯>百度>网页版的顺序分别尝试打开地图
PS:百度的大部分软件我个人都不喜欢,所以将百度地图尽量放在最后调用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
* 启动导航
*
* @param lat 纬度
* @param lng 经度
*/
private void startToNavigation(String lat, String lng) {
String gaodeMap = "com.autonavi.minimap"; //高德地图包名:com.autonavi.minimap
String tencentMap = "com.tencent.map"; //腾讯地图包名:com.tencent.map
String BaiduMap = "com.baidu.BaiduMap"; //百度地图包名:com.baidu.BaiduMap
if (isPackageInstalled(gaodeMap)) {
materialDialog.dismiss();
startGaodeMap(lat, lng);
Log.d("isPackageInstalled", "安装了高德地图APP: ");
} else if (isPackageInstalled(tencentMap)) {
materialDialog.dismiss();
startTencentMap(lat, lng);
//如果安装了腾讯地图APP
Log.d("isPackageInstalled", "安装了腾讯地图APP: ");
} else if (isPackageInstalled(BaiduMap)) {
materialDialog.dismiss();
startBaiduMap(lat, lng);
//如果安装了百度地图APP
Log.d("isPackageInstalled", "安装了百度地图APP:");
} else {
materialDialog.dismiss();
startHTMLMap(lat, lng);
//如果什么地图都没安装,则打开网页版地图进行导航
Log.d("isPackageInstalled", "什么地图都没安装: ");
}
}

打开高德地图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* 打开高德地图进行导航
*
* @param lat 目的地经纬度
* @param lng 目的地经纬度
*/
private void startGaodeMap(String lat, String lng) {
//如果安装了高德地图APP
Log.d("isPackageInstalled", "安装了高德地图APP: ");
// 高德地图
try {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
//将功能Scheme以URI的方式传入data
Uri uri = Uri.parse("androidamap://navi?sourceApplication=appname" +
"&poiname=fangheng" +
"&lat=" +
lat +
"&lon=" +
lng +
"&dev=1&style=2");
intent.setData(uri);
//启动该页面即可
context.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
startHTMLMap(lat, lng);
}
}

打开腾讯地图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* 打开腾讯地图进行导航
*
* @param lat 目的地经纬度
* @param lng 目的地经纬度
*/
private void startTencentMap(String lat, String lng) {
//如果安装了腾讯地图APP
Log.d("isPackageInstalled", "安装了腾讯地图APP: ");
// 腾讯地图
try {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
//将功能Scheme以URI的方式传入data
Uri uri = Uri.parse("qqmap://map/routeplan?type=drive&tocoord=" + lat + "," + lng + "&policy=0&referer=baluche");
intent.setData(uri);
//启动该页面即可
context.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
startHTMLMap(lat, lng);
}
}

打开百度地图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* 打开百度地图进行导航
*
* @param lat 目的地经纬度
* @param lng 目的地经纬度
*/
private void startBaiduMap(String lat, String lng) {
//如果安装了百度地图APP
Log.d("isPackageInstalled", "安装了百度地图APP: ");
// 百度地图
try {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
//将功能Scheme以URI的方式传入data
Uri uri = Uri.parse("baidumap://map/direction?destination=" +
lat +
"," +
lng +
"&mode=driving");
intent.setData(uri);
//启动该页面即可
context.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
startHTMLMap(lat, lng);
}
}

打开网页地图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* 打开腾讯地图进行导航
*
* @param lat 目的地经纬度
* @param lng 目的地经纬度
*/
private void startTencentMap(String lat, String lng) {
//如果安装了腾讯地图APP
Log.d("isPackageInstalled", "安装了腾讯地图APP: ");
// 腾讯地图
try {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
//将功能Scheme以URI的方式传入data
Uri uri = Uri.parse("qqmap://map/routeplan?type=drive&tocoord=" +
lat +
"," +
lng +
"&policy=0" +
"&referer=baluche");
intent.setData(uri);
//启动该页面即可
context.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
startHTMLMap(lat, lng);
}
}

运行结果

图片名称
图片名称