最近需要做一个关于导航的功能,得用手机存在的地图来打开,然后从网上找了一篇博客里面只写了怎么判断手机是否安装百度地图的,从网上各种翻,终于在高德地图上找到一句话。
开发者在调用URI 之前需要先判断是否安装了高德地图APP。如果没有安装,下载安装高德地图。然后调用相关地图功能,如周边实时路况信息显示,示例如下:
Intent intent = new Intent("android.intent.action.VIEW",android.net.Uri.parse("androidamap://showTraffic?sourceApplication=softname&poiid=BGVIS1&lat=36.2&lon=116.1&level=10&dev=0"));intent.setPackage(“com.autonavi.minimap”);startActivity(intent);
然后综合网上那篇博客代码如下,
/** * 检查手机上是否安装了指定的软件 * @param context * @param packageName:应用包名 * @return */ private boolean isAvilible(Context context, String packageName){ //获取packagemanager final PackageManager packageManager = context.getPackageManager(); //获取所有已安装程序的包信息 ListpackageInfos = packageManager.getInstalledPackages(0); //用于存储所有已安装程序的包名 List packageNames = new ArrayList (); //从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); }@Override public void onClick(View v) { switch (v.getId()){ case R.id.common_right: //如果已安装, if(isAvilible(mcontext,"com.baidu.BaiduMap")) {//传入指定应用包名 WinToast.makeText(mcontext,"即将用百度地图打开导航").show(); Uri mUri = Uri.parse("geo:"+jingdu+","+weidu+"?q="+title); Intent mIntent = new Intent(Intent.ACTION_VIEW,mUri); startActivity(mIntent); }else if(isAvilible(mcontext,"com.autonavi.minimap")){ WinToast.makeText(mcontext,"即将用高德地图打开导航").show(); Uri mUri = Uri.parse("geo:"+jingdu+","+weidu+"?q="+title); Intent intent = new Intent("android.intent.action.VIEW",mUri); startActivity(intent); }else { WinToast.makeText(mcontext,"请安装第三方地图方可导航").show(); return; } break; default: break; } }
我这里判断了高德和百度的,希望能帮到你们