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<String> 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進行導航
// * <h3>Version</h3> 1.0
// * <h3>CreateTime</h3> 2016/6/27,11:23
// * <h3>UpdateTime</h3> 2016/6/27,11:23
// * <h3>CreateAuthor</h3> luzhenbang
// * <h3>UpdateAuthor</h3>
// * <h3>UpdateInfo</h3> (此處輸入修改内容,若無修改可不寫.)
// *
// * @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進行導航
* <h3>Version</h3> 1.0
* <h3>CreateTime</h3> 2016/6/27,13:58
* <h3>UpdateTime</h3> 2016/6/27,13:58
* <h3>CreateAuthor</h3>
* <h3>UpdateAuthor</h3>
* <h3>UpdateInfo</h3> (此處輸入修改内容,若無修改可不寫.)
*
* @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);
// }