Android Utils - 打开外部地图导航(百度、高德、腾讯)

外部打开腾讯地图网页版: 

1、腾讯地图官方文档说明 

 Intent tengXuIntent = new Intent();
                    // 驾车路线规划
                    tengXuIntent.setData(Uri.parse("qqmap://map/routeplan?type=drive&from=我的位置&fromcoord=" + LbsService.instance().getLatitude() + "," + LbsService.instance().getLongitude() + "&to=" + 此处填写你的地址+ "&tocoord=" + mLatitude + "," + mLongitude));
                    if (isInstallByread("com.tencent.map")) {
                        //启动该页面即可
                        ActivityManager.getTopActivity().startActivity(tengXuIntent);
                    } else {
                    //如果没有安装则跳转到应用市场
                        Toast.makeText(ActivityManager.getTopActivity(), "您尚未安装腾讯地图,请先安装地图", Toast.LENGTH_LONG).show();
                        Uri uri = Uri.parse("market://details?id=com.tencent.map");
                        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                        if (intent.resolveActivity(ActivityManager.getTopActivity().getPackageManager()) != null) {
                            ActivityManager.getTopActivity().startActivity(intent);
                        }
                    }

外部打开高德地图进行导航:

2、高德地图官方文档URI·API 

 Intent gaoDeIntent = new Intent();
                    gaoDeIntent.setAction(Intent.ACTION_VIEW);
                    gaoDeIntent.addCategory(Intent.CATEGORY_DEFAULT);
                    gaoDeIntent.setPackage("com.autonavi.minimap");
                    gaoDeIntent.setData(Uri.parse("androidamap://route/plan/?slat=" + LbsService.instance().getLatitude() + "&slon=" + LbsService.instance().getLongitude() + "&sname=我的位置&dlat=" + mLatitude + "&dlon=" + mLongitude + "&dname=" + 此处填写你的地址+ "&dev=0&t=0"));

                    if (isInstallByread("com.autonavi.minimap")) {
                        ActivityManager.getTopActivity().startActivity(gaoDeIntent);
                        Log.e("GasStation", "高德地图客户端已经安装");
                    } else {
                 //如果没有安装则跳转到应用市场
                        Toast.makeText(ActivityManager.getTopActivity(), "您尚未安装高德地图客户端,请先安装地图", Toast.LENGTH_LONG).show();
                        Uri uri = Uri.parse("market://details?id=com.autonavi.minimap");
                        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                        if (intent.resolveActivity(ActivityManager.getTopActivity().getPackageManager()) != null) {
                            ActivityManager.getTopActivity().startActivity(intent);
                        }
                    }

外部打开百度地图进行导航:

3、百度地图官方文档URL·API 说明

 // 驾车路线规划
                    Intent baiDuIntent = new Intent();
                    baiDuIntent.setData(Uri.parse("baidumap://map/direction?coord_type=gcj02&src=fangbaobao|房保保&region=" + LbsService.instance().getLocCity() + "&origin=" + LbsService.instance().getLatitude() + "," + LbsService.instance().getLongitude() + "&destination=" + mLatitude + "," + mLongitude + "&mode=driving&sy=3"));
                    if (isInstallByread("com.baidu.BaiduMap")) {
                        ActivityManager.getTopActivity().startActivity(baiDuIntent);
                        Log.e("GasStation", "百度地图客户端已经安装");
                    } else {
 //如果没有安装则跳转到应用市场
                        Toast.makeText(ActivityManager.getTopActivity(), "您尚未安装百度地图客户端,请先安装地图", Toast.LENGTH_LONG).show();
                        Uri uri = Uri.parse("market://details?id=com.baidu.BaiduMap");
                        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                        if (intent.resolveActivity(ActivityManager.getTopActivity().getPackageManager()) != null) {
                            ActivityManager.getTopActivity().startActivity(intent);
                        }
                    }

以上代码涉及到的ActivityManager以及LbService均是封装好可以直接使用的工具类

ActivityManager是自己封装的一个管理activity的工具类,一般用在获取上下文或者是在fragment获取当前activity中去使用

LbService 是自己封装的定位的工具类,很通用,用于定位,存储定位信息,获取经纬度,城市信息等等

关于其中的工具类ActivityManager

import android.app.Activity;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2016/5/14 0014.
 */
public class ActivityManager {

    private static final List<BaseActivity> ActivityStack = new ArrayList<>();

    public static List<BaseActivity> getStack(){
        return ActivityStack;
    }

    public static void add( BaseActivity activity ) {
        ActivityStack.add( activity );
    }

    public static void remove( Activity activity ) {
        for( int i = ActivityStack.size()-1; i >= 0; i-- )
        {
            if( ActivityStack.get(i) == activity ) {
                ActivityStack.remove(i);
                break;
            }
        }
    }

    public static BaseActivity getTopActivity() {
       if( ActivityStack.size() > 0 ) {
           return ActivityStack.get( ActivityStack.size()-1 );
       } else {
          throw new NullPointerException("栈顶没有Activity");
       }
    }

    public static int getActivityCount() {
        if( ListUtil.isEmpty(ActivityStack) ) return 0;
        return ActivityStack.size();
    }

    public static BaseActivity getActivity( int position ) {
        if( position < getActivityCount() ) {
            return ActivityStack.get(position);
        } else {
            return null;
        }
    }

    public static void removeActivity( int position ) {
        if( position < getActivityCount() ) {
            ActivityStack.remove( position );
        }
    }

    public static boolean contains( Class zClass ) {
        for( int i = 0; i < ActivityStack.size(); i++ ) {
            if( ActivityStack.get(i).getClass().toString().equals( zClass.toString() ) ) return true;
        }
        return false;
    }

}

判断是否安装目标应用

 /**
     * 判断是否安装目标应用
     *
     * @param packageName 目标应用安装后的包名
     * @return 是否已安装目标应用
     */
    private boolean isInstallByread(String packageName) {
        return new File("/data/data/" + packageName).exists();
    }

猜你喜欢

转载自blog.csdn.net/yang1349day/article/details/85220820
今日推荐