现在我们在做app的时候除了功能性以外,还会考虑开发时间和开发成本 ,所以很多功能我们可以技巧性的避开自己开发,直接跳转到三方软件。
比如 地图的导航功能,我们完全可以不必集成三方的sdk,
这样做的好处有几点
1.减少自身开发成本
2.减少项目及app大小
3.功能性自己做不如三方app的全面
但是同时也有弊端
就是一些客户倘若没有安装任何一款三方的地图软件 这样的话可能使用时会有一些不方便,但是感觉这种用户比较少,即使没有安装,也可以跳转到应用市场对应的三方软件下载界面。
话不多说 ,直接说正题 地图跳转实现
在做跳转之前 要先判断当前机器上有没有安装相关的三方软件,方法如下
/* * 检查手机上是否安装了指定的软件 * * @param context * * @param packageName:应用包名 * * @return */ 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); }
经纬度变量换成自己的
mLatitude
mLongitude
目的地
mAreaName
1.百度地图跳转
if (isAvilible(context, "com.baidu.BaiduMap")) {// 传入指定应用包名 try { Intent intent = Intent.getIntent("intent://map/direction?destination=latlng:" + mLatitude + "," + mLongitude + "|name:"+mAreaName + // 终点 "&mode=driving&" + // 导航路线方式 "region=北京" + // "&src=新疆和田#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end"); context.startActivity(intent); // 启动调用 } catch (URISyntaxException e) { Log.e("intent", e.getMessage()); } } else {// 未安装 Toast.makeText(context, "您尚未安装百度地图", Toast.LENGTH_LONG) .show(); Uri uri = Uri .parse("market://details?id=com.baidu.BaiduMap"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); context.startActivity(intent); }
2.高德地图跳转
if (isAvilible(context, "com.autonavi.minimap")) { try { Intent intent = Intent.getIntent("androidamap://navi?sourceApplication=新疆和田&poiname="+mAreaName+"&lat=" + mLatitude + "&lon=" + mLongitude + "&dev=0"); context.startActivity(intent); } catch (URISyntaxException e) { e.printStackTrace(); } } else { Toast.makeText(context, "您尚未安装高德地图", Toast.LENGTH_LONG) .show(); Uri uri = Uri .parse("market://details?id=com.autonavi.minimap"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); context.startActivity(intent); }
3.谷歌地图跳转
if (isAvilible(context, "com.google.android.apps.maps")) { Uri gmmIntentUri = Uri.parse("google.navigation:q=" + mLatitude + "," + mLongitude + ", + Sydney +Australia"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); context.startActivity(mapIntent); } else { Toast.makeText(context, "您尚未安装谷歌地图", Toast.LENGTH_LONG) .show(); Uri uri = Uri .parse("market://details?id=com.google.android.apps.maps"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); context.startActivity(intent); }