现在随着APP定制化的需求,很多APP都需要导航功能,然而自己APP集成一个导航,除了会增加APP大几十兆之外,还没有专业导航软件功能强大,然而现在大部分手机自带导航软件,所以只需要打开调用即可,包括腾讯的微信,都没有直接导航,而是调用了手机上安装的导航软件,这里教大家 几步实现调用。
//腾讯地图判断部分
Intent intent2 = new Intent();
intent2.setAction(Intent.ACTION_VIEW);
intent2.addCategory(Intent.CATEGORY_DEFAULT);
//将功能Scheme以URI的方式传入data
Uri uri2 = Uri.parse("qqmap://map/routeplan?type=drive&to=tvShopName&tocoord=" + userLat + "," + userLng);
intent2.setData(uri2);
//跳转高德地图 lng目的地纬度 lat 目的地精度 tvshopName 目的地名称
if (isAvilible(mContext, "com.autonavi.minimap")) {
try {
Intent intent = Intent.getIntent("androidamap://navi?sourceApplication=新疆和田&poiname=" + titleAddress + "&lat="
+ userLat
+ "&lon="
+ userLng + "&dev=0");
mContext.startActivity(intent);
} catch (URISyntaxException e) {
e.printStackTrace();
}
} else if (isAvilible(mContext, "com.baidu.BaiduMap")) {// 传入指定应用包名
//跳转百度地图
try {
Intent intent = Intent.getIntent("intent://map/direction?destination=latlng:"
+ userLat + ","
+ userLng + "|name:" + titleAddress + // 终点
"&mode=driving&" + // 导航路线方式
"region=武汉" + //
"&src=东风标致#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");
mContext.startActivity(intent); // 启动调用
} catch (URISyntaxException e) {
Log.e("intent", e.getMessage());
}
} else if (intent2.resolveActivity(mContext.getPackageManager()) != null) {
//启动该页面即可 腾讯地图
mContext.startActivity(intent2);
} else {
T.showToastSafe("您尚未安装地图");
//跳转到应用商店去下载高德地图app
Uri uri = Uri.parse("market://details?id=com.autonavi.minimap");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
}
//判断手机上是否安装了指定的百度地图,高德地图等软件
public static boolean isAvilible(Context context, String packageName) {
// 获取packagemanager
final PackageManager packageManager = context.getPackageManager();
// 获取所有已安装程序的包信息
List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
// 用于存储所有已安装程序的包名
List<String> packageNames = new ArrayList<String>();
// 从pinfo中将包名字逐一取出,压入pName list中
if (packageInfos != null) {
for (int i = 0; i < packageInfos.size(); i++) {
String packName = packageInfos.get(i).packageName;
packageNames.add(packName);
}
}
// 判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE
return packageNames.contains(packageName);
}
好了,这就是跳转,其中mContext是上下文, Activity中换成this即可,userLat 是目的地的纬度,userlng为目的地经度,titleAddress为目的地名称或者是目的地地址。以上代码优先打开高德,如果手机上没有高德,则打开百度地图,其次腾讯地图,如果都没有则会跳转到应用商店下载高德地图。