开启3方地图百度高德

public class OpenGDMapUtil {

    private static SelectPicPopupWindow menuWindow;
    private static Activity mActivtiy;
    private static String sPosition;
    private static String ePosition;
    private static LatLng eLatLng;
    private static String type;
    private static LatLng sLatLng;
    /**
     *
     * @param mActivity 上下文
     * @param sLatLng 开始点的坐标
     * @param sPosition 开锁的位置
     * @param ePosition 结束的位置
     * @param eLatlng 结束的坐标
     * @param type 行走的类型,车,步行,公交
     */
    public static boolean startNaviGao(Activity mActivity
            , LatLng sLatLng,
                                       String sPosition,
                                       String ePosition, LatLng eLatlng, String type) {

        OpenGDMapUtil.mActivtiy = mActivity;
        OpenGDMapUtil.sPosition = sPosition;
        OpenGDMapUtil.ePosition = ePosition;
        OpenGDMapUtil.eLatLng = eLatlng;
        OpenGDMapUtil.type = type;
        OpenGDMapUtil.sLatLng = sLatLng;

        if (isAvilible(mActivity, "com.autonavi.minimap")) {//包含高德
            if(isAvilible(mActivity,"com.baidu.BaiduMap")){//包含百度
                //TODO 弹出选择地图提示框
                //实例化SelectPicPopupWindow
                return true;//返回true表示手机同时包含高德和百度地图
            }else{//如果不是同时包含两个地图那么就选择手机安装的一个地图进行开启
                openAppMap(mActivity
                        , sLatLng.latitude, sLatLng.longitude
                        , sPosition, eLatlng.latitude, eLatlng.longitude, ePosition);
                return false;
            }
        }else if(isAvilible(mActivity,"com.baidu.BaiduMap")) {
            openBaiduMap(mActivity
                    , sLatLng.latitude, sLatLng.longitude
                    , sPosition, eLatlng.latitude, eLatlng.longitude, ePosition);
            return false;
        }else{//如果手机没有地图的话就默认开启高德的网页地图进行导航
            openWebGDNavi(mActivity,
                    sPosition,sLatLng.latitude,sLatLng.longitude,ePosition,eLatlng.latitude
                    ,eLatlng.longitude,type);
            return false;
        }
    }

    //为弹出窗口实现监听类
    private static View.OnClickListener itemsOnClick = new View.OnClickListener(){

        public void onClick(View v) {
            menuWindow.dismiss();
            switch (v.getId()) {
                case R.id.btn_gd:
                    //开启高德地图
                    openAppMap(mActivtiy
                            ,sLatLng.latitude,sLatLng.longitude
                            ,sPosition,eLatLng.latitude,eLatLng.longitude,ePosition);
                    break;
                case R.id.btn_baidu:
                    //开启百度

                    break;
                default:
                    break;
            }


        }

    };

    //验证各种导航地图是否安装
    private 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);
    }

    /**
     * 打开高德 Web地图导航
     */
    private static void openWebGDNavi(Activity mActivity, String sPosition, double sLat, double sLng, String ePosition, double eLat, double eLng, String type) {
        StringBuffer stringBuffer = new StringBuffer("http://ditu.amap.com/dir?from[name]="+ sPosition+
                "&from[lnglat]="+sLng+"%2c"+sLat+"&to[name]="+ePosition +
                "&to[lnglat]="+eLng+"%2c"+eLat+"&type="+type+"&policy=1");
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(stringBuffer.toString()));
        mActivity.startActivity(intent);
    }
    /**
     *打开app高德
     */
    public static void openAppMap(Activity mActivity, double slat,
                                  double slon, String sname, double dlat, double dlon, String dname){
        Uri mapUri = Uri.parse(getGdMapUri("map", String.valueOf(slat), String.valueOf(slon), sname,
                String.valueOf(dlat), String.valueOf(dlon),
                dname));
        Intent loction = new Intent(Intent.ACTION_VIEW, mapUri);
        mActivity.startActivity(loction);
    }

    /**
     * 开启百度
     * @param mActivity
     * @param slat
     * @param slon
     * @param sname
     * @param dlat
     * @param dlon
     * @param dname
     */
    public static void openBaiduMap(Activity mActivity, double slat, double slon,
                                     String sname, double dlat, double dlon, String dname){
        Intent i1 = new Intent();
// 公交路线规划
        i1.setData(Uri.parse("baidumap://map/direction?origin=name:"+sname+"|latlng:"+slat+","+slon+"&destination=name:"+dname+"&mode=transit&sy=3&index=0&target=1"));

        mActivity.startActivity(i1);

    }
    /**
     * 获取打开高德地图应用uri
     */
    private static String getGdMapUri(String appName, String slat, String slon, String sname, String dlat, String dlon, String dname){
        String uri = "androidamap://route?sourceApplication=%1$s&slat=%2$s&slon=%3$s&sname=%4$s&dlat=%5$s&dlon=%6$s&dname=%7$s&dev=0&m=0&t=2";
        return String.format(uri, appName, slat, slon, sname, dlat, dlon, dname);
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值