Android 起调第三方导航,百度地图,高德地图,腾讯地图。起调高德地图导航

                                         String mode, String region, String origin_region, String destination_region,

                                         String coord_type, String zoom, String src) {

    StringBuffer stringBuffer = new StringBuffer("intent://map/direction?origin=");

    stringBuffer.append(origin)

            .append("&destination=")

            .append(destination)

            .append("&mode=")

            .append(mode);

    if (!TextUtils.isEmpty(region)) {

        stringBuffer.append("&region=").append(region);

    }

    if (!TextUtils.isEmpty(origin_region)) {

        stringBuffer.append("&origin_region=").append(origin_region);

    }

    if (!TextUtils.isEmpty(destination_region)) {

        stringBuffer.append("&destination_region=").append(destination_region);

    }

    if (!TextUtils.isEmpty(coord_type)) {

        stringBuffer.append("&coord_type=").append(coord_type);

    }



    if (!TextUtils.isEmpty(zoom)) {

        stringBuffer.append("&zoom=").append(zoom);

    }

    stringBuffer.append("&src=")

            .append(src)

            .append("#Intent;scheme=bdapp;package=" + BAIDU +";end");

    String intentString = stringBuffer.toString();

    try {

        Intent intent = Intent.getIntent(intentString);

        context.startActivity(intent);

    } catch (URISyntaxException e) {

        e.printStackTrace();

    }

}



/***

 * @param originlat 起点维度

 * @param originlon 起点经度

 * @param destinationlat 终点

 * @param mode 出行方式 导航模式,固定为transit(公交)、 driving(驾车)、walking(步行)和riding(骑行). 默认:driving

 * 具体看百度地图开放者平台官网  http://lbsyun.baidu.com/index.php?title=uri/api/android

 */

/*// 公交路线规划

//i1.setData(Uri.parse(“baidumap://map/direction?origin=name:对外经贸大学|latlng:39.98871,116.43234&destination=name:西直门&mode=transit&sy=3&index=0&target=1”));

// 驾车路线规划

i1.setData(Uri.parse(“baidumap://map/direction?region=beijing&origin=39.98871,116.43234&destination=name:西直门&mode=driving”));

// 步行路线规划

i1.setData(Uri.parse(“baidumap://map/direction?region=beijing&origin=39.98871,116.43234&destination=40.057406655722,116.2964407172&mode=walking”));

startActivity(i1);*/

public static void goToBaiduNaviActivity(Context context, double originlat, double originlon,

                                         double destinationlat, double destinationlon, String mode) {

    String locationStr = "baidumap://map/direction?origin="

            + GCJ02ToBD09(originlon, originlat)[1]

            + ","

            + GCJ02ToBD09(originlon, originlat)[0]

            + "&destination="

            + GCJ02ToBD09(destinationlon, destinationlat)[1]

            + ","

            + GCJ02ToBD09(destinationlon, destinationlat)[0]

            + "&mode="

            + mode;

    Intent intent = new Intent("android.intent.action.VIEW",

            android.net.Uri.parse(/*stringBuffer.toString()*/locationStr));

    intent.setPackage(BAIDU);

    context.startActivity(intent);

}





/** 腾讯地图 Uri 标识*/

public  final static  String BASE_URL = "qqmap://map/";

/**

 * 调用腾讯地图app驾车导航

 * (此处输入方法执行任务.)

 * <h3>Version</h3> 1.0

 * <h3>CreateTime</h3> 2017/11/9,15:31

 * <h3>UpdateTime</h3> 2017/11/9,15:31

 * <h3>CreateAuthor</h3>

 * <h3>UpdateAuthor</h3>

 * <h3>UpdateInfo</h3> (此处输入修改内容,若无修改可不写.)

 * @param context

 * @param from  选 出发地址

 * @param fromcoord 选 出发经纬度   移动端如果起点名称和起点坐标均未传递,则使用当前定位位置作为起点 如 39.9761,116.3282

 * @param to  必 目标地址

 * @param tocoord  必 目标经纬度 39.9761,116.3282

 * @param policy  选  本参数取决于type参数的取值

 *               公交:type=bus,policy有以下取值 0:较快捷 1:少换乘 2:少步行 3:不坐地铁

 *               驾车:type=drive,policy有以下取值 0:较快捷 1:无高速 2:距离 policy的取值缺省为0

 * @param coord_type  选 坐标类型,取值如下:1 GPS  2 腾讯坐标(默认)  如果用户指定该参数为非腾讯地图坐标系,则URI API自动进行坐标处理,以便准确对应到腾讯地图底图上。

 * @param type  必 公交:bus  驾车:drive  步行:walk(仅适用移动端)

 * @param referer  必  调用来源,一般为您的应用名称,为了保障对您的服务,请务必填写!

 */

public static  void invokeNavi(Context context, @NonNull String type, String coord_type, String from ,

                               String fromcoord, @NonNull String to, @NonNull String tocoord, String policy, @NonNull String referer){

    StringBuffer stringBuffer  = new StringBuffer(BASE_URL)

            .append("routeplan?")

            .append("type=")

            .append(type)

            .append("&to=")

            .append(to)

            .append("&tocoord=")

            .append(tocoord)

            .append("&referer=")

            .append(referer);

    if (!TextUtils.isEmpty(from)){

        stringBuffer.append("&from=").append(from);

    }

    if (!TextUtils.isEmpty(fromcoord)){

        stringBuffer.append("&fromcoord=").append(fromcoord);

    }

    if (!TextUtils.isEmpty(policy)){

        stringBuffer .append("&policy=").append(policy);

    }

    if (!TextUtils.isEmpty(coord_type)){

        stringBuffer .append("&coord_type=").append(coord_type);

    }

    Intent intent = new Intent();

    intent.setData(Uri.parse(stringBuffer.toString()));

    context.startActivity(intent);

}



/**

 *  file:///E:/someDownCode/IntentMapGuide-master/%E8%85%BE%E8%AE%AF%E5%9C%B0%E5%9B%BE_URI%E8%A7%84%E8%8C%83%E6%96%87%E6%A1%A3_150417/URI%E8%A7%84%E8%8C%83%E6%96%87%E6%A1%A3.html

 * qqmap://map/routeplan?type=drive&from=天坛南门&fromcoord=39.873145,116.413306&to=国家大剧院&tocoord=39.907380,116.388501

 * coord=39.904956,116.389449  lat<纬度>,lng<经度>

 * //移动端启动腾讯地图App,并显示从出发点[天坛南门] 到 [目的地坐标(国家大剧院)] 的驾车路线规划

 * @param context

 * @param type 路线规划方式参数:公交 bus   驾车 drive    步行 walk

 * @param from

 * @param fromLat

 * @param fromLon

 * @param to

 * @param toLat

 * @param toLon

 */

public static void goToTenCentNaviActivity(Context context, String type, String from,

                                           double fromLat, double fromLon, String to, double toLat, double toLon) {

    String locationStr = "qqmap://map/routeplan?type="

            + type

            +"&from="

            + from

            + "&fromcoord="

            + fromLat

            + ","

            + fromLon

            + "&to="

            + to

            + "&tocoord="

            + toLat

            + ","

            + toLon;

    System.out.println("tencent-location:" + locationStr);

    Intent intent = new Intent("android.intent.action.VIEW", android.net.Uri.parse(locationStr));

    intent.setPackage(TENCENT);

    context.startActivity(intent);

}



/**

 * 根据包名检测某个APP是否安装

 * <h3>Version</h3> 1.0

 * <h3>CreateTime</h3> 2016/6/27,13:02

 * <h3>UpdateTime</h3> 2016/6/27,13:02

 * <h3>CreateAuthor</h3>

 * <h3>UpdateAuthor</h3>

 * <h3>UpdateInfo</h3> (此处输入修改内容,若无修改可不写.)

 *

 * @param packageName 包名  百度的包名为 com.baidu.BaiduMap,高德com.autonavi.minimap,腾讯

 * @return true 安装 false 没有安装

 */

public static boolean isInstallByRead(String packageName) {

    return new File("/data/data/" + packageName).exists();

}



/*

 * 检查手机上是否安装了指定的软件

 * @param context

 * @param packageName:应用包名

 * @return

 */

public static List<String> isAvilibleList(Context context){

    //获取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;

            if (packName.equals(BAIDU)) {

                packageNames.add(BAIDU);

            } else if (packName.equals(GAODE)) {

                packageNames.add(GAODE);

            }else if (packName.equals(TENCENT)) {

                packageNames.add(TENCENT);

            }

        }

    }

    //判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE

    return packageNames;

}



/**

 * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换

 * 即谷歌、高德 转 百度

 * 腾讯和高德经纬度一样

 **经纬度转换 http://blog.csdn.net/meegomeego/article/details/39927017

 * @param gcj_lon

 * @param gcj_lat

 * @return Double[lon, lat]

 *CoordtransformUtil文件坐标转换

 */

private static double x_PI = 3.14159265358979324 * 3000.0 / 180.0;



public static Double[] GCJ02ToBD09(Double gcj_lon, Double gcj_lat) {

    double z =

            Math.sqrt(gcj_lon * gcj_lon + gcj_lat * gcj_lat) + 0.00002 * Math.sin(gcj_lat * x_PI);

    double theta = Math.atan2(gcj_lat, gcj_lon) + 0.000003 * Math.cos(gcj_lon * x_PI);

    Double[] arr = new Double[2];

    arr[0] = z * Math.cos(theta) + 0.0065;

    arr[1] = z * Math.sin(theta) + 0.006;

    return arr;

}

/**

 * 调用高德导航

 */

/*public void aMap(View view){

if (AMapUtil.isInstallByRead("com.autonavi.minimap")){

  AMapUtil.goToNaviActivity(this,"test",null,"34.264642646862","108.95108518068","1","2");

}

}*/

}




1、两个动画



<?xml version="1.0" encoding="utf-8"?>
<translate

    android:duration="200"

    android:fromYDelta="50%p"

    android:toYDelta="0" />

<?xml version="1.0" encoding="utf-8"?>
<translate

    android:duration="200"

    android:fromYDelta="0"

    android:toYDelta="50%p" />



2、style






3、dialoglayout



<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

          android:orientation="vertical"

          android:layout_width="match_parent"

          android:background="#FFFFFF"

          android:layout_height="match_parent">



<LinearLayout

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:background="#f5f5f5"

    android:orientation="vertical">



    <LinearLayout

        android:id="@+id/neibaiduLayout"

        android:layout_width="match_parent"

        android:layout_height="50dp"

        android:gravity="center"

        android:orientation="horizontal"

        android:visibility="gone">



        <TextView

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:layout_marginLeft="8dp"

            android:gravity="center"

            android:text="内置导航"

            android:textColor="#0b7cd4"

            android:textSize="15dp" />

    </LinearLayout>



    <LinearLayout

        android:id="@+id/baiduLayout"

        android:layout_width="match_parent"

        android:layout_height="50dp"

        android:gravity="center"

        android:orientation="horizontal"

        android:visibility="gone">



        <TextView

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:layout_marginLeft="8dp"

            android:gravity="center"

            android:text="百度地图"

            android:textColor="#0b7cd4"

            android:textSize="15dp" />

    </LinearLayout>



    <LinearLayout

        android:id="@+id/gaodeLayout"

        android:layout_width="match_parent"

        android:layout_height="50dp"

        android:gravity="center"

        android:orientation="horizontal"

        android:visibility="gone">



        <TextView

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:layout_marginLeft="8dp"

            android:gravity="center"

            android:text="高德地图"

            android:textColor="#0b7cd4"

            android:textSize="15dp" />





    </LinearLayout>



    <LinearLayout

        android:id="@+id/tencentLayout"

        android:layout_width="match_parent"

        android:layout_height="50dp"

        android:gravity="center"

        android:orientation="horizontal"

        android:visibility="gone">



        <TextView

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:layout_marginLeft="8dp"

            android:gravity="center"

            android:text="腾讯地图"

            android:textColor="#0b7cd4"

            android:textSize="15dp" />





    </LinearLayout>

</LinearLayout>



<TextView

    android:id="@+id/dismiss"

    android:layout_width="match_parent"

    android:layout_height="44dp"

    android:gravity="center"

    android:textSize="15dp"

    android:textColor="#343434"

    android:text="取 消"/>



4、showDialog



/**

 *hxw

 * 弹框显示导航地图

 *

 * */

public void showMapDialog(final String startName, final String endName, final double originlat, final double originlon, final double deslat, final double deslon) {

    final Dialog dialog;

    LayoutInflater inflater = LayoutInflater.from(MarkerActivity.this);

    View view = inflater.inflate(R.layout.navigation_dialog, null);

    LinearLayout baiduLayout = (LinearLayout) view.findViewById(R.id.baiduLayout);

    LinearLayout gaodeLayout = (LinearLayout) view.findViewById(R.id.gaodeLayout);

    LinearLayout tencentLayout = (LinearLayout) view.findViewById(R.id.tencentLayout);

    TextView dismiss = (TextView)view.findViewById(R.id.dismiss);

    dialog = new Dialog(MarkerActivity.this);

    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    dialog.setContentView(view);

    Window dialogWindow = dialog.getWindow();

    dialogWindow.setGravity(Gravity.BOTTOM);

    dialogWindow.setWindowAnimations(R.style.AnimViewshow);

// dialogWindow.getDecorView().setPadding(0, 0, 0, 0);

    WindowManager.LayoutParams lp = dialogWindow.getAttributes();

    lp.width = WindowManager.LayoutParams.MATCH_PARENT;

// dialogWindow.setGravity(Gravity.CENTER);

// lp.width = 900; // 宽度

// lp.height = 650; // 高度

// lp.alpha = 0.7f; // 透明度

    dialogWindow.setAttributes(lp);



    dialog.setCanceledOnTouchOutside(true);

    List<String> installedMapList = AmapUtil.isAvilibleList(MarkerActivity.this);

    if (installedMapList.size() == 0) {

        Toast.makeText(MarkerActivity.this, "请安装导航地图软件", Toast.LENGTH_LONG).show();

        return;

    }

    for (String map :installedMapList) {

        if (map.equals(AmapUtil.BAIDU)) {

            baiduLayout.setVisibility(View.VISIBLE);

        }else if (map.equals(AmapUtil.GAODE)) {

            gaodeLayout.setVisibility(View.VISIBLE);

        } else if (map.equals(AmapUtil.TENCENT)) {

            tencentLayout.setVisibility(View.VISIBLE);

        }

    }



    StringBuilder sb = new StringBuilder();



    baiduLayout.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            AmapUtil.goToBaiduNaviActivity(MarkerActivity.this, originlat, originlon, deslat, deslon, "driving");

            dialog.dismiss();

        }

    });

    gaodeLayout.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            AmapUtil.goToGaodeNaviActivity(MarkerActivity.this, "yxbl","", String.valueOf(deslat), String.valueOf(deslon), "0", "0");

            dialog.dismiss();

        }

    });

    tencentLayout.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

// AmapUtil.goToTenCentNaviActivity(getContext(), “drive”, startName, originlat, originlon, endName, deslat, deslon);

            String toc = String.valueOf(deslat)+","+String.valueOf(deslon);

// AmapUtil.invokeNavi(mContext,“drive”,null,null,null,“故宫”,“39.9761,116.3282”,null,“textApp”);

            AmapUtil.invokeNavi(mContext,"drive",null,null,null,endName,toc,null,"textApp");

            dialog.dismiss();

        }

    });

    dismiss.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            dialog.dismiss();

        }

    });

    dialog.show();

}



5、调用



showMapDialog(“起点”, string, latitude, longitude, lawd, lojd );




//string、起点位置如:体育路5号,latitude起点纬度,longitude起点经度,lawd终点纬度,lojd终点经度



起调高德地图导航:

---------



private static final String GAODE_PACKAGE = “com.autonavi.minimap”;




工具方法:



private void startGaodeNavi(double latitude, double longitude) {

Intent intents = new Intent();

intents.setData(Uri.parse("androidamap://navi?sourceApplication=softname&lat="

        + latitude

        + "&lon="

        + longitude

        + "&dev=0"));

startActivity(intents);

}


private boolean checkApkExist(Context context, String packageName) {

if (TextUtils.isEmpty(packageName)) {

    return false;

}

try {

    context.getPackageManager()

            .getApplicationInfo(packageName, PackageManager.MATCH\_UNINSTALLED\_PACKAGES);

    return true;

} catch (PackageManager.NameNotFoundException e) {

    return false;

}

}


private void navigate(double longitude, double latitude) {

if (checkApkExist(this, GAODE\_PACKAGE)) {

    startGaodeNavi(latitude, longitude);

} else {

    //showOneToast(R.string.qingxiananzhuanggaodeditu);

    ToastUtil.showToastLong(this, "请安装高德app,此刻正打开网页版");

    Intent intent = new Intent();

    intent.setAction("android.intent.action.VIEW");

    intent.setData(Uri.parse("http://uri.amap.com/navigation?"

            + "to="

            + longitude

            + ","

            + latitude

            + "&mode=car&src=nyx\_super"));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值