package com.shendi.Utils;import android.content.Context;import android.content.Intent;import android.location.Location;import android.location.LocationManager;import android.net.Uri;import android.widget.Toast;import com.shendi.View.application.MyApplication;import java.io.File;import java.util.List;/** * Created by zhq_zhao on 2017/5/5. * 注意百度不需要起始位置的经纬度,而高德需要起始位置的经纬度 * 使用第三方导航:高德、百度。。。。。。。。。。 */public class AmapUtil {    private static AmapUtil mAmapUtil;    private LocationManager locationManager;    private String locationProvider;    private String slat;    private String slng;    private  Location location;    public AmapUtil(Context getApplicationContext) {        //获取地理位置管理器        locationManager = (LocationManager) getApplicationContext.getSystemService(Context.LOCATION_SERVICE);        //获取所有可用的位置提供器        List providers = locationManager.getProviders(true);        if(providers.contains(LocationManager.GPS_PROVIDER)){            //如果是GPS            locationProvider = LocationManager.GPS_PROVIDER;        }else if(providers.contains(LocationManager.NETWORK_PROVIDER)){            //如果是Network            locationProvider = LocationManager.NETWORK_PROVIDER;        }else{            Toast.makeText(MyApplication.context, "没有可用的位置提供器", Toast.LENGTH_SHORT).show();            return ;        }        //获取Location        location = locationManager.getLastKnownLocation(locationProvider);        if(location !=null){            //不为空,显示地理位置经纬度            getLocationInfo(location);        }    }    /**获取起点位置用于高德地图导航的使用     *     * @param location     */    private void getLocationInfo(Location location) {        if (location != null) {            //获取纬度            slat = String.valueOf(location.getLatitude());            //获取经度            slng = String.valueOf(location.getLongitude());        } else {            Toast.makeText(MyApplication.context, "请允许定位权限", Toast.LENGTH_SHORT).show();            return ;        }    }    /**     * 根据包名检测某个APP是否安装     * @param packageName 包名  百度的包名为 com.baidu.BaiduMap,高德com.autonavi.minimap,腾讯     * @return true 安装 false 没有安装     */    public static boolean isInstallByRead(String packageName) {        return new File("/data/data/" + packageName).exists();    }    public static AmapUtil getInstance(){        if(mAmapUtil ==null){            mAmapUtil =new AmapUtil(MyApplication.context);        }        return mAmapUtil;    }    /**     * 打开百度地图导航客户端     * intent = Intent.getIntent("baidumap://map/navi?location=34.264642646862,108.95108518068&type=BLK&src=thirdapp.navi.you     * location 坐标点 location与query二者必须有一个,当有location时,忽略query     * query    搜索key   同上     * type 路线规划类型  BLK:躲避拥堵(自驾);TIME:最短时间(自驾);DIS:最短路程(自驾);FEE:少走高速(自驾);默认DIS     */    public void openBaiduNavi(Context context,String lat,String lng) {        StringBuffer stringBuffer = new StringBuffer("baidumap://map/geocoder?location=")                .append(lat).append(",").append(lng).append("&type=TIME");        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(stringBuffer.toString()));        intent.setPackage("com.baidu.BaiduMap");        context.startActivity(intent);    }    /**     * 打开google Web地图导航     */    public void openWebGoogleNavi(Context context,String lat,String lng) {        StringBuffer stringBuffer = new StringBuffer("http://ditu.google.cn/maps?hl=zh&mrt=loc&q=").append(lat).append(",").append(lng);        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(stringBuffer.toString()));        context. startActivity(i);    }    /**     * 打开google地图客户端开始导航     * q:目的地     * mode:d驾车 默认     */    public void openGoogleNavi(Context context,String lat,String lng) {        StringBuffer stringBuffer = new StringBuffer("google.navigation:q=").append(lat).append(",").append(lng).append("&mode=d");        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(stringBuffer.toString()));        i.setPackage("com.google.android.apps.maps");        context.startActivity(i);    }    /**     * @param  //slat 起点     * @param dlat 终点     * @param dev 必填 是否偏移(0:lat 和 lon 是已经加密后的,不需要国测加密; 1:需要国测加密)     * @param t t = 1(公交) =2(驾车) =4(步行)     * @param showType 高德导航     * /*"androidamap://route?sourceApplication=changanchuxing"     * + "&slat=36.2&slon=116.1&sname=abc&dlat=36.3"     * + "&dlon=116.2&dname=def&dev=0&m=0&t=1&showType=1"     * 高德开放平台 http://lbs.amap.com/api/uri-api/guide/android-uri-explain/route/     */    public  void goToGaodeNaviActivity2(Context context, String sourceApplication, String sname, String dlat, String dlon, String dname, String dev, String m,                                             String t, String showType) {        String locationStr = "androidamap://route?sourceApplication="                + sourceApplication                +                "&slat="                + slat                + "&slon="                + slng                +                "&sname="                + sname                + "&dlat="                + dlat                + "&dlon="                + dlon                + "&dname="                + dname                + "&dev="                + dev                + "&m="                + m                + "&t="                + t                + "&showType="                + showType;        Intent intent = new Intent("android.intent.action.VIEW",                android.net.Uri.parse(locationStr));        intent.setPackage("com.autonavi.minimap");        context.startActivity(intent);    }}    //-------------------------------------以下的暂时废弃不用---------------------------------------------------------------//////    /**//     * 启动BaiduApp进行导航//     * 

Version

1.0
// *

CreateTime

2016/6/27,11:23
// *

UpdateTime

2016/6/27,11:23
// *

CreateAuthor

luzhenbang
// *

UpdateAuthor

// *

UpdateInfo

(此处输入修改内容,若无修改可不写.)
// *// * @param context 上下文// * @param origin 必选 起点名称或经纬度,或者可同时提供名称和经纬度,此时经纬度优先级高,将作为导航依据,名称只负责展示。例如:// * latlng:34.264642646862,108.95108518068|name:我家// * @param destination 必选 终点名称或经纬度,或者可同时提供名称和经纬度,此时经纬度优先级高,将作为导航依据,名称只负责展示。// * @param mode 必选 导航模式,固定为transit、driving、walking,分别表示公交、驾车和步行// * @param region 必选 城市名或县名 当给定region时,认为起点和终点都在同一城市,除非单独给定起点或终点的城市。// * @param origin_region 必选 起点所在城市或县// * @param destination_region 必选 终点所在城市或县// * @param coord_type 可选 坐标类型,可选参数,默认为bd09经纬度坐标。// * @param zoom 可选 展现地图的级别,默认为视觉最优级别。// * @param src 必选 调用来源,规则:companyName|appName。// */// /** 百度导航 */// public static void goToBaiduNaviActivity(Context context, String origin, String destination,// 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("®ion=").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=com.baidu.BaiduMap;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("com.baidu.BaiduMap");// 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("com.tencent.map");// context.startActivity(intent);// }//// /**// * 火星坐标系 (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;// } /** * 启动高德App进行导航 *

Version

1.0 *

CreateTime

2016/6/27,13:58 *

UpdateTime

2016/6/27,13:58 *

CreateAuthor

*

UpdateAuthor

*

UpdateInfo

(此处输入修改内容,若无修改可不写.) * * @param sourceApplication 必填 第三方调用应用名称。如 amap * @param poiname 非必填 POI 名称 * @param lat 必填 纬度 * @param lon 必填 经度 * @param dev 必填 是否偏移(0:lat 和 lon 是已经加密后的,不需要国测加密; 1:需要国测加密) * @param style 必填 导航方式(0 速度快; 1 费用少; 2 路程短; 3 不走高速;4 躲避拥堵;5 不走高速且避免收费;6 不走高速且躲避拥堵; * 7 躲避收费和拥堵;8不走高速躲避收费和拥堵)) */ /** 高德导航 **/// public static void goToGaodeNaviActivity(Context context, String sourceApplication,// String poiname, String lat, String lon, String dev, String style) {// StringBuffer stringBuffer =// new StringBuffer("androidamap://navi?sourceApplication=").append(sourceApplication);// if (!TextUtils.isEmpty(poiname)) {// stringBuffer.append("&poiname=").append(poiname);// }// stringBuffer.append("&lat=")// .append(lat)// .append("&lon=")// .append(lon)// .append("&dev=")// .append(dev)// .append("&style=")// .append(style);//// Intent intent =// new Intent("android.intent.action.VIEW", android.net.Uri.parse(stringBuffer.toString()));// intent.setPackage("com.autonavi.minimap");// context.startActivity(intent);// }//-----------------------下面是导航第二选择方案---------------------------------------------------------------------------------------------------------------//// /**// * 根据位置直接解析跳转// */// private void MapduApiShow() {// if (isInstallByRead("com.autonavi.minimap")) {//手机安装了百度地图//// //百度地图api调用//// Intent i1 = new Intent();//// // 地址解析//// i1.setData(Uri.parse("baidumap://map/geocoder?src=openApiDemo&address=申迪南路"));//// mActivity.startActivity(i1);// //如果不是地址解析而是传入经纬度那么就用下面的方法// openBaiduNavi(mActivity,lat,lng);// } else {// if (isInstallByRead("com.autonavi.minimap")) {//手机安装高德地图,高德需要起点的经纬度而百度不需要// Intent intent = new Intent();// intent.setData(Uri// .parse("androidamap://route?sourceApplication=appSelfName"// // + "&slat=36.2&slon=116.1&sname=abc"// + "&slat=36.2&slon=116.1&sname="+"起点"// + "&dlat=36.3" + "&dlon=116.2" +//终点坐标// "&dname=" +"终点"// + "&dev=0&m=0&t=1&showType=1"));// mActivity.startActivity(intent);// }else{// Toast.makeText(mActivity,"请安装高德或百度地图客户端",Toast.LENGTH_LONG).show();// }// }// }////// public static boolean isInstallByRead(String packageName) {// return new File("/data/data/" + packageName).exists();// }// public void openBaiduNavi(Context context, String lat, String lng) {// // i1.setData(Uri.parse("baidumap://map/geocoder?src=openApiDemo&address=申迪南路"));// StringBuffer stringBuffer = new StringBuffer("baidumap://map/geocoder?location=")// .append(lat).append(",").append(lng).append("&type=TIME");// Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(stringBuffer.toString()));// intent.setPackage("com.baidu.BaiduMap");// context.startActivity(intent);// }

更多相关文章

  1. Android(安卓)BottomNavigationBar 底部导航栏
  2. (Android(安卓)View)底部导航栏—BottomNavigationView简单使用
  3. android 百度API定位以及获取天气
  4. android顶部导航条
  5. Android(安卓)Jetpack 最佳开发姿势
  6. Android(安卓)Jetpack-Navigation改造使用
  7. Android使用GPS获取用户地理位置并监听位置变化的方法
  8. Android(安卓)Jetpack之Navigation源码分析
  9. Android(安卓)SystemUI 的一些主要操作

随机推荐

  1. Android应用程序apk内xml文件编码解析
  2. Android(安卓)SD卡简单的文件读写操作
  3. 零打碎敲学Android(二)—做个拼图游戏吧
  4. Android日志系统Logcat源代码简要分析
  5. android 触摸事件、点击事件的区别
  6. 谈谈Android的一些UI设计
  7. Android切近实战(一)
  8. Android特色开发之传感器和语音识别
  9. Android实现进程之间通信
  10. Android之UI学习篇六:ImageView实现图片旋