Commit 0d0d6e64 by Luosp

导航基本完成,需优化

parent 94111397
...@@ -11,8 +11,6 @@ android { ...@@ -11,8 +11,6 @@ android {
consumerProguardFiles 'consumer-rules.pro' consumerProguardFiles 'consumer-rules.pro'
ndk { ndk {
abiFilters "armeabi-v7a" abiFilters "armeabi-v7a"
// abiFilters "arm64-v8a"
// abiFilters "armeabi"
} }
} }
...@@ -29,28 +27,6 @@ android { ...@@ -29,28 +27,6 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8
} }
sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/assets/'] } }
packagingOptions {
exclude 'assets/tnavi/HCI_AUTH/HCI_AUTH_FOREVER'
exclude 'assets/tnavi/log/gpspos_data.txt'
exclude 'assets/tnavi/pdata/fx.sdb'
exclude 'assets/tnavi/pdata/font.pdt'
exclude 'assets/tnavi/pdata/res.pdt'
exclude 'assets/tnavi/sdb/cdata/rsh_0.sdb'
exclude 'assets/tnavi/sdb/cdata/zon.sdb'
exclude 'assets/tnavi/sdb/cdata/man.cdt'
exclude 'assets/tnavi/sdb/cdata/rsh.sdb'
exclude 'assets/tnavi/sdb/cdata/url.cdt'
exclude 'assets/tnavi/sdb/cdata/gd.sdb'
exclude 'assets/tnavi/sdb/cdata/ano.cdt'
exclude 'assets/tnavi/sdb/adata/tmp'
exclude 'assets/tnavi/config.ini'
exclude 'assets/tnavi/Dictionary.Dat'
exclude 'assets/tnavi/udata/utmp.txt'
exclude 'assets/tnavi/DictionaryWordSort.dat'
exclude 'assets/AccountInfo.txt'
}
} }
dependencies { dependencies {
...@@ -65,9 +41,10 @@ dependencies { ...@@ -65,9 +41,10 @@ dependencies {
//日志类 //日志类
implementation 'com.jakewharton.timber:timber:4.5.1' implementation 'com.jakewharton.timber:timber:4.5.1'
//工具类 //工具类
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.mapzen.android:lost:2.1.2'
implementation 'com.squareup.okhttp3:okhttp:3.12.3' implementation 'com.squareup.okhttp3:okhttp:3.12.3'
implementation 'org.greenrobot:eventbus:3.0.0'
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.mapzen.android:lost:2.1.2'
implementation 'com.jakewharton.timber:timber:4.7.0'
} }
apply from: '../mvn_push.gradle'
...@@ -10,39 +10,58 @@ package cn.com.founder.arcgislib.constants; ...@@ -10,39 +10,58 @@ package cn.com.founder.arcgislib.constants;
public class Constants { public class Constants {
/*****************************************互联网*********************************************/ /*****************************************互联网*********************************************/
//互联网-地图 //互联网-地图
private static String baseUrl = "http://47.92.225.109:6080/arcgis/rest/services/founder/dg20191120/MapServer"; private static String baseUrl = "http://47.92.225.109:6080/arcgis/rest/services/founder/dg20191120/MapServer";
//互联网-Geo //互联网-Geo
private static String baseGeoUrl = "http://68.174.25.107:8090/esBzdzTestQuery"; private static String baseGeoUrl = "http://68.174.25.107:8090/esBzdzTestQuery";
//互联网-搜索 //互联网-搜索
private static String searchUrl = "http://47.92.226.24:8051/selectPoiDataList"; private static String searchUrl = "http://47.92.226.24:8051/selectPoiDataList";
//互联网-导航 //互联网-导航
private static String naviUrl = "minedata.cn/lbsservice/navi/"; // 逆地理编码服务
//二标四实-单位 private static String baseInverseUrl = "http://minedata.cn/lbsservice/service/coder/reverseGeocodingEx";
private static String dwUrl = "http://68.174.69.46:8051/selectVdwjx"; // // 搜索服务
//二标四实-房屋 private static String baseSearchUrl = "http://onlinesearch.trafficeye.com.cn:16001/search2020/";
private static String fwUrl = "http://68.174.69.46:8051/selectVfwjx"; // //算路服务
//二标四实-地址 private static String baseRouteingUrl = "http://navicore.mapbar.com/nc/v1/routing";
private static String dzUrl = "http://68.174.69.46:8051/selectVdzjx"; // //路口放大图服务
private static String baseExpandViewUrl = "https://navicore.mapbar.com/nc/v1/jv/roadnet";
//测试网络接口
private static String baseNetworkUrl = "";
//华为网关鉴权服务-accessToken(导航时调用) //二标四实-单位
private static String apiGUrl = "https://68.26.19.197:8343/v1/apigw/oauth2/token"; private static String dwUrl = "http://68.174.69.46:8051/selectVdwjx";
//华为网关鉴权服务-userToken(导航时调用) //二标四实-房屋
private static String apiGLoginUrl = "http://68.26.19.197:8380/dcuc/api/checklogin.action"; private static String fwUrl = "http://68.174.69.46:8051/selectVfwjx";
//热力图 //二标四实-地址
private static String hotMapUrl = "http://47.92.225.109:6080/arcgis/rest/services/gp/rltModel/GPServer/hotPotServer"; private static String dzUrl = "http://68.174.69.46:8051/selectVdzjx";
//华为网关鉴权服务-accessToken(导航时调用)
private static String apiGUrl = "https://68.26.19.197:8343/v1/apigw/oauth2/token";
//华为网关鉴权服务-userToken(导航时调用)
private static String apiGLoginUrl = "http://68.26.19.197:8380/dcuc/api/checklogin.action";
//热力图
private static String hotMapUrl = "http://47.92.225.109:6080/arcgis/rest/services/gp/rltModel/GPServer/hotPotServer";
// private static String hotMapUrl = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/911CallsHotspot/GPServer/911%20Calls%20Hotspot"; // private static String hotMapUrl = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/911CallsHotspot/GPServer/911%20Calls%20Hotspot";
/**********************************************************************************************/ /**********************************************************************************************/
/*****************************************用户网*********************************************** /*****************************************用户网***********************************************
//如果使用公安局的映射,导航907和958行代码需要修改坐标系 //如果使用公安局的映射,导航907和958行代码需要修改坐标系
//用户网-地图 //用户网-地图
private static String baseUrl = "http://192.168.2.56:19076/arcgis/rest/services/founder/dg20191120/MapServer"; private static String baseUrl = "http://192.168.2.56:19076/arcgis/rest/services/founder/dg20191120/MapServer";
//用户网-导航 //用户网-导航
private static String naviUrl = "192.168.2.56:19095/PPmap/LBSservice2/"; // 逆地理编码服务
private static String baseInverseUrl = "http://192.168.2.56:19095/PPmap/LBSservice/service/coder/reverseGeocodingEx";
// 搜索服务
private static String baseSearchUrl = "http://192.168.2.56:19095/PPmap/LBSservice/search/";
//算路服务
private static String baseRouteingUrl = "http://192.168.2.56:19095/PPmap/nc/v1/routing";
//路口放大图服务
private static String baseExpandViewUrl = "http://192.168.2.56:19095/PPmap/nc/v1/jv/roadnet";
//测试网络接口
private static String baseNetworkUrl = "http://192.168.2.56:19095/PPmap/LBSservice/search/keyword?token=1111&page=1&count=10&adCode=440100&key=123";
//公安网-Geo //公安网-Geo
private static String baseGeoUrl = "http://192.168.2.56:19087/esBzdzTestQuery"; private static String baseGeoUrl = "http://192.168.2.56:19087/esBzdzTestQuery";
//用户网-搜索 //用户网-搜索
...@@ -53,38 +72,47 @@ public class Constants { ...@@ -53,38 +72,47 @@ public class Constants {
private static String fwUrl = "http://192.168.2.56:19084/selectVfwjx"; private static String fwUrl = "http://192.168.2.56:19084/selectVfwjx";
//二标四实-地址 //二标四实-地址
private static String dzUrl = "http://192.168.2.56:19084/selectVdzjx"; private static String dzUrl = "http://192.168.2.56:19084/selectVdzjx";
//华为网关鉴权服务-accessToken(导航时调用) //华为网关鉴权服务-accessToken(导航时调用)
private static String apiGUrl = "https://192.168.2.56:19098/v1/apigw/oauth2/token"; private static String apiGUrl = "https://192.168.2.56:19098/v1/apigw/oauth2/token";
//华为网关鉴权服务-userToken(导航时调用) //华为网关鉴权服务-userToken(导航时调用)
private static String apiGLoginUrl = "http://192.168.2.56:19095/dcuc/api/checklogin.action"; private static String apiGLoginUrl = "http://192.168.2.56:19095/dcuc/api/checklogin.action";
//热力图 //热力图
private static String hotMapUrl = "http://192.168.2.56:19088/arcgis/rest/services/gp/rltModel/GPServer/hotPotServer"; private static String hotMapUrl = "http://192.168.2.56:19088/arcgis/rest/services/gp/rltModel/GPServer/hotPotServer";
/********************************************************************************************** /**********************************************************************************************
/*****************************************公安网*********************************************** /*****************************************公安网***********************************************
//公安网-地图 //公安网-地图
private static String baseUrl = "http://68.174.69.45:6080/arcgis/rest/services/founder/dg20191120/MapServer"; private static String baseUrl = "http://68.174.69.45:6080/arcgis/rest/services/founder/dg20191120/MapServer";
//公安网-Geo //公安网-Geo
private static String baseGeoUrl = "http://68.174.25.107:8090/esBzdzTestQuery"; private static String baseGeoUrl = "http://68.174.25.107:8090/esBzdzTestQuery";
//公安网-搜索 //公安网-搜索
private static String searchUrl = "http://68.174.69.46:8051/selectPoiDataList"; private static String searchUrl = "http://68.174.69.46:8051/selectPoiDataList";
//公安网-导航 //公安网-导航
private static String naviUrl = "68.26.19.197:8380/PPmap/LBSservice2/"; // 逆地理编码服务
//二标四实-单位 private static String baseInverseUrl = "http://68.26.19.197:8380/PPmap/LBSservice/service/coder/reverseGeocodingEx";
private static String dwUrl = "http://68.174.69.46:8051/selectVdwjx"; // 搜索服务
//二标四实-房屋 private static String baseSearchUrl = "http://68.26.19.197:8380/PPmap/LBSservice/search/";
private static String fwUrl = "http://68.174.69.46:8051/selectVfwjx"; //算路服务
//二标四实-地址 private static String baseRouteingUrl = "http://68.26.19.197:8380/PPmap/nc/v1/routing";
private static String dzUrl = "http://68.174.69.46:8051/selectVdzjx"; //路口放大图服务
//华为网关鉴权服务-accessToken(导航时调用) private static String baseExpandViewUrl = "http://68.26.19.197:8380/PPmap/nc/v1/jv/roadnet";
private static String apiGUrl = "https://68.26.19.197:8343/v1/apigw/oauth2/token"; //测试网络接口
//华为网关鉴权服务-userToken(导航时调用) private static String baseNetworkUrl = "http://68.26.19.197:8380/PPmap/LBSservice/search/keyword?token=1111&page=1&count=10&adCode=440100&key=123";
private static String apiGLoginUrl = "http://68.26.19.197:8380/dcuc/api/checklogin.action"; //二标四实-单位
//热力图 private static String dwUrl = "http://68.174.69.46:8051/selectVdwjx";
private static String hotMapUrl = "http://68.174.69.45:6081/arcgis/rest/services/gp/rltModel/GPServer/hotPotServer"; //二标四实-房屋
private static String fwUrl = "http://68.174.69.46:8051/selectVfwjx";
//二标四实-地址
private static String dzUrl = "http://68.174.69.46:8051/selectVdzjx";
//华为网关鉴权服务-accessToken(导航时调用)
private static String apiGUrl = "https://68.26.19.197:8343/v1/apigw/oauth2/token";
//华为网关鉴权服务-userToken(导航时调用)
private static String apiGLoginUrl = "http://68.26.19.197:8380/dcuc/api/checklogin.action";
//热力图
private static String hotMapUrl = "http://68.174.69.45:6081/arcgis/rest/services/gp/rltModel/GPServer/hotPotServer";
/**********************************************************************************************/ /**********************************************************************************************/
// argis证书 // argis证书
private static String baseRunTime = "runtimelite,1000,rud9526010123,none,XXMFA0PL4S0MC2EN0175"; private static String baseRunTime = "runtimelite,1000,rud9526010123,none,XXMFA0PL4S0MC2EN0175";
...@@ -99,6 +127,8 @@ public class Constants { ...@@ -99,6 +127,8 @@ public class Constants {
private static String baseHuaweiAuthP = "JWY@123CJH"; private static String baseHuaweiAuthP = "JWY@123CJH";
private static String baseHuaweiAuthAppKey = "2a1c50f40af443a4b58d1375e87a4810"; private static String baseHuaweiAuthAppKey = "2a1c50f40af443a4b58d1375e87a4810";
private static String baseHuaweiAuthAppSecret = "1321cbbf9f3947108aee3f44ea007485"; private static String baseHuaweiAuthAppSecret = "1321cbbf9f3947108aee3f44ea007485";
//arcGis证书 //arcGis证书
public static final String BASE_MAP_RUNTIME = baseRunTime; public static final String BASE_MAP_RUNTIME = baseRunTime;
//服务器Url //服务器Url
...@@ -111,8 +141,6 @@ public class Constants { ...@@ -111,8 +141,6 @@ public class Constants {
public static final String BASE_GEO_URL = baseGeoUrl; public static final String BASE_GEO_URL = baseGeoUrl;
//搜索 //搜索
public static final String BASE_SEARCH_URL = searchUrl; public static final String BASE_SEARCH_URL = searchUrl;
//导航
public static final String BASE_NAVI_URL = naviUrl;
//热力图 //热力图
public static final String BASE_HOT_POTS_URL = hotMapUrl; public static final String BASE_HOT_POTS_URL = hotMapUrl;
...@@ -131,7 +159,20 @@ public class Constants { ...@@ -131,7 +159,20 @@ public class Constants {
public static final String BASE_HUA_WEI_AUTH_APPKEY = baseHuaweiAuthAppKey; public static final String BASE_HUA_WEI_AUTH_APPKEY = baseHuaweiAuthAppKey;
public static final String BASE_HUA_WEI_AUTH_APP_SECRET = baseHuaweiAuthAppSecret; public static final String BASE_HUA_WEI_AUTH_APP_SECRET = baseHuaweiAuthAppSecret;
// 逆地理编码服务
public static final String BASE_NAVI_INVERSE_URL = baseInverseUrl;
// // 搜索服务
public static final String BASE_NAVI_SEARCH_URL = baseSearchUrl;
// //算路服务
public static final String BASE_NAVI_ROUTEING_URL = baseRouteingUrl;
// //路口放大图服务
public static final String BASE_NAVI_EXPAND_VIEW_URL = baseExpandViewUrl;
//测试网络接口
public static final String BASE_NAVI_NETWORK_URL = baseNetworkUrl;
//华为网关鉴权服务-userToken //华为网关鉴权服务-userToken
public static final String BASE_APIG_LOGIN_URL = apiGLoginUrl; public static final String BASE_APIG_LOGIN_URL = apiGLoginUrl;
} }
package cn.com.founder.arcgislib.navi; package cn.com.founder.arcgislib.navi;
import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.model.PointModel;
import cn.com.founder.arcgislib.navi.option.IArcGisNaviOption; import cn.com.founder.arcgislib.navi.option.IArcGisNaviOption;
import cn.com.founder.arcgislib.view.ArcGisNaviView; import cn.com.founder.arcgislib.view.ArcGisNaviView;
...@@ -21,27 +23,27 @@ public class ArcGisNavi implements IArcGisNaviOption { ...@@ -21,27 +23,27 @@ public class ArcGisNavi implements IArcGisNaviOption {
this.mArcGisNaviView = arcGisNaviView; this.mArcGisNaviView = arcGisNaviView;
} }
// @Override @Override
// public IArcGisNaviOption setShowNaviLayout(boolean isShow) { public IArcGisNaviOption setShowNaviLayout(boolean isShow) {
// mArcGisNaviView.setShowNaviLayout(isShow); mArcGisNaviView.setShowNaviLayout(isShow);
// return this; return this;
// } }
//
// @Override @Override
// public IArcGisNaviOption setNaviViewLocation(Variable.ViewLocation location) { public IArcGisNaviOption setNaviViewLocation(Variable.ViewLocation location) {
// mArcGisNaviView.setNaviViewLocation(location); mArcGisNaviView.setNaviViewLocation(location);
// return this; return this;
// } }
//
// @Override @Override
// public IArcGisNaviOption setNaviImage(int naviImage) { public IArcGisNaviOption setNaviImage(int naviImage) {
// mArcGisNaviView.setNaviImage(naviImage); mArcGisNaviView.setNaviImage(naviImage);
// return this; return this;
// } }
//
// @Override @Override
// public IArcGisNaviOption setCustomPointNavi(PointModel startPoint, PointModel endPoint) { public IArcGisNaviOption setCustomPointNavi(PointModel startPoint, PointModel endPoint) {
// mArcGisNaviView.setCustomPointNavi(startPoint,endPoint); mArcGisNaviView.setCustomPointNavi(startPoint,endPoint);
// return this; return this;
// } }
} }
package cn.com.founder.arcgislib.navi.option; package cn.com.founder.arcgislib.navi.option;
import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.model.PointModel;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
...@@ -9,26 +12,26 @@ package cn.com.founder.arcgislib.navi.option; ...@@ -9,26 +12,26 @@ package cn.com.founder.arcgislib.navi.option;
* Description:导航操作 * Description:导航操作
*/ */
public interface IArcGisNaviOption { public interface IArcGisNaviOption {
// /** /**
// * @param isShow boolean-是否显示导航布局 * @param isShow boolean-是否显示导航布局
// * 默认隐藏 * 默认隐藏
// */ */
// IArcGisNaviOption setShowNaviLayout(boolean isShow); IArcGisNaviOption setShowNaviLayout(boolean isShow);
//
// /** /**
// * @param location {@link Variable.ViewLocation } NaviView显示位置 * @param location {@link Variable.ViewLocation } NaviView显示位置
// */ */
// IArcGisNaviOption setNaviViewLocation(Variable.ViewLocation location); IArcGisNaviOption setNaviViewLocation(Variable.ViewLocation location);
//
// /** /**
// * @param naviImage int(资源ID)-导航图片 * @param naviImage int(资源ID)-导航图片
// */ */
// IArcGisNaviOption setNaviImage(int naviImage); IArcGisNaviOption setNaviImage(int naviImage);
//
// /** /**
// * 自定义点导航 * 自定义点导航
// * @param startPoint 起点 * @param startPoint 起点
// * @param endPoint 终点 * @param endPoint 终点
// */ */
// IArcGisNaviOption setCustomPointNavi(PointModel startPoint, PointModel endPoint); IArcGisNaviOption setCustomPointNavi(PointModel startPoint, PointModel endPoint);
} }
...@@ -54,7 +54,7 @@ public class GpsUtil { ...@@ -54,7 +54,7 @@ public class GpsUtil {
} }
/** /**
* Description: WGS-84 to GCJ-02 <BR> * Description: WGS-84 to d <BR>
* *
* @param latitude 纬度 * @param latitude 纬度
* @param longitude 经度 * @param longitude 经度
......
...@@ -6,6 +6,7 @@ import android.os.Build; ...@@ -6,6 +6,7 @@ import android.os.Build;
import android.widget.Toast; import android.widget.Toast;
import com.yanzhenjie.permission.AndPermission; import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.runtime.Permission;
import java.util.List; import java.util.List;
...@@ -18,6 +19,10 @@ import java.util.List; ...@@ -18,6 +19,10 @@ import java.util.List;
*/ */
public class PermissionUtil { public class PermissionUtil {
public static final String[] STORAGE_LOCATION_PERMISSION_GROUP = new String[]{Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE,Permission.ACCESS_COARSE_LOCATION, Permission.ACCESS_FINE_LOCATION};
public static final String[] LOCATION_PERMISSION_GROUP = new String[]{Permission.ACCESS_COARSE_LOCATION, Permission.ACCESS_FINE_LOCATION};
public static final String[] STORAGE_PERMISSION_GROUP = new String[]{Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE};
/** /**
* 请求权限 * 请求权限
* @param requestPermissionCode 总是拒绝后提示用户去设置 * @param requestPermissionCode 总是拒绝后提示用户去设置
......
...@@ -329,4 +329,42 @@ public class ToolUtil { ...@@ -329,4 +329,42 @@ public class ToolUtil {
}; };
return hostnameVerifier; return hostnameVerifier;
} }
/**
* 返回路程
*
* @param roadValue
* @return
*/
public static String getRoadLenght(float roadValue) {
String speedText = String.valueOf(roadValue / 1000);
if (speedText.contains(".")) {
BigDecimal b = new BigDecimal(roadValue / 1000);
float speed = b.setScale(1, BigDecimal.ROUND_HALF_UP).floatValue();
return String.valueOf(speed);
} else {
return speedText;
}
}
/**
* 返回剩余的时间
*
* @param timeValue
* @return
*/
public static String getRoadTime(int timeValue) {
int hour = timeValue / 3600;
int minuter = (timeValue % 3600) / 60;
if (hour == 0 && minuter == 0) {
return timeValue + "秒";
} else if (hour == 0 && minuter != 0) {
return minuter + "分钟";
} else if (hour != 0 && minuter == 0) {
return hour + "小时";
} else {
return hour + "小时" + minuter + "分钟";
}
}
} }
...@@ -47,7 +47,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; ...@@ -47,7 +47,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.yanzhenjie.permission.AndPermission; import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.runtime.Permission;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -81,8 +80,7 @@ import okhttp3.Response; ...@@ -81,8 +80,7 @@ import okhttp3.Response;
* Description:位置相关类 * Description:位置相关类
*/ */
public class ArcGisLocationView extends LinearLayout implements View.OnClickListener, ArcGisMapView.MyTouchLocationListener { public class ArcGisLocationView extends LinearLayout implements View.OnClickListener, ArcGisMapView.MyTouchLocationListener {
private final String[] LOCTION_PERMISSION_GROUP = new String[]{Permission.ACCESS_COARSE_LOCATION, Permission.ACCESS_FINE_LOCATION};
private final String[] STORAGE_PERMISSION_GROUP = new String[]{Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE};
private final int FLAG_START_LOCATION = 0; private final int FLAG_START_LOCATION = 0;
private final int FLAG_CREATE_MARKER = 1; private final int FLAG_CREATE_MARKER = 1;
...@@ -140,7 +138,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -140,7 +138,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
/** /**
* 定位图片 * 定位图片
*/ */
private ImageView mLocationIv; protected ImageView mLocationIv;
/** /**
* 导入图片 * 导入图片
*/ */
...@@ -248,10 +246,9 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -248,10 +246,9 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
this.mLabelLocationNormalImage = R.drawable.icon_label_location_normal; this.mLabelLocationNormalImage = R.drawable.icon_label_location_normal;
this.mLabelLocationSelectedImage = R.drawable.icon_label_location_selected; this.mLabelLocationSelectedImage = R.drawable.icon_label_location_selected;
this.mFollowMapGetCenterPoint = false; this.mFollowMapGetCenterPoint = false;
arcGisMapView.setMyTouchLocationListener(this);
mCalloutStyleBuilder = new CalloutStyleBuilder(context); mCalloutStyleBuilder = new CalloutStyleBuilder(context);
mCalloutContentBuilder = new CalloutContentBuilder(); mCalloutContentBuilder = new CalloutContentBuilder();
arcGisMapView.setMyTouchLocationListener(this);
mMapView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { mMapView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override @Override
public void onGlobalLayout() { public void onGlobalLayout() {
...@@ -346,7 +343,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -346,7 +343,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
* @param scale * @param scale
*/ */
public void startLocation(double x, double y, double scale) { public void startLocation(double x, double y, double scale) {
if (AndPermission.hasPermissions(getContext(), LOCTION_PERMISSION_GROUP)) { if (AndPermission.hasPermissions(getContext(), PermissionUtil.LOCATION_PERMISSION_GROUP)) {
ManualLocation(x, y, scale); ManualLocation(x, y, scale);
} else { } else {
PermissionUtil.requestPermission(getContext(), 0, new PermissionUtil.PermissionQuestListener() { PermissionUtil.requestPermission(getContext(), 0, new PermissionUtil.PermissionQuestListener() {
...@@ -363,7 +360,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -363,7 +360,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
public String onAlwaysDenied() { public String onAlwaysDenied() {
return "定位权限获取失败"; return "定位权限获取失败";
} }
}, LOCTION_PERMISSION_GROUP); }, PermissionUtil.LOCATION_PERMISSION_GROUP);
} }
} }
...@@ -533,7 +530,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -533,7 +530,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
*/ */
@TargetApi(Build.VERSION_CODES.LOLLIPOP) @TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void initLocationPermission(double scale) { private void initLocationPermission(double scale) {
if (AndPermission.hasPermissions(getContext(), LOCTION_PERMISSION_GROUP)) { if (AndPermission.hasPermissions(getContext(), PermissionUtil.LOCATION_PERMISSION_GROUP)) {
getLocation(scale); getLocation(scale);
} else { } else {
PermissionUtil.requestPermission(getContext(), 0, new PermissionUtil.PermissionQuestListener() { PermissionUtil.requestPermission(getContext(), 0, new PermissionUtil.PermissionQuestListener() {
...@@ -550,7 +547,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -550,7 +547,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
public String onAlwaysDenied() { public String onAlwaysDenied() {
return "定位权限获取失败"; return "定位权限获取失败";
} }
}, LOCTION_PERMISSION_GROUP); }, PermissionUtil.LOCATION_PERMISSION_GROUP);
} }
} }
...@@ -559,7 +556,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -559,7 +556,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
*/ */
@TargetApi(Build.VERSION_CODES.LOLLIPOP) @TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void initStoragePermission() { private void initStoragePermission() {
if (AndPermission.hasPermissions(getContext(), STORAGE_PERMISSION_GROUP)) { if (AndPermission.hasPermissions(getContext(), PermissionUtil.STORAGE_PERMISSION_GROUP)) {
getSDTxtFile(); getSDTxtFile();
} else { } else {
PermissionUtil.requestPermission(getContext(), 0, new PermissionUtil.PermissionQuestListener() { PermissionUtil.requestPermission(getContext(), 0, new PermissionUtil.PermissionQuestListener() {
...@@ -576,7 +573,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -576,7 +573,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
public String onAlwaysDenied() { public String onAlwaysDenied() {
return "文件读取权限失败"; return "文件读取权限失败";
} }
}, STORAGE_PERMISSION_GROUP); }, PermissionUtil.STORAGE_PERMISSION_GROUP);
} }
} }
......
...@@ -4,15 +4,16 @@ import android.annotation.SuppressLint; ...@@ -4,15 +4,16 @@ import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Point;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.text.Spannable;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.animation.Animation; import android.view.animation.Animation;
...@@ -26,11 +27,9 @@ import android.widget.Toast; ...@@ -26,11 +27,9 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.esri.arcgisruntime.geometry.Geometry; import com.esri.arcgisruntime.geometry.Geometry;
import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.geometry.PointCollection; import com.esri.arcgisruntime.geometry.PointCollection;
import com.esri.arcgisruntime.geometry.Polyline; import com.esri.arcgisruntime.geometry.Polyline;
import com.esri.arcgisruntime.geometry.SpatialReference; import com.esri.arcgisruntime.geometry.SpatialReference;
...@@ -38,33 +37,43 @@ import com.esri.arcgisruntime.mapping.view.Graphic; ...@@ -38,33 +37,43 @@ import com.esri.arcgisruntime.mapping.view.Graphic;
import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.symbology.PictureMarkerSymbol;
import com.esri.arcgisruntime.symbology.SimpleLineSymbol; import com.esri.arcgisruntime.symbology.SimpleLineSymbol;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.minedata.minenavi.MineNaviMain; import com.minedata.minenavi.SDKInitializer;
import com.minedata.minenavi.common.GeoPoint; import com.minedata.minenavi.mapdal.CoordType;
import com.minedata.minenavi.common.JamPath; import com.minedata.minenavi.mapdal.DataPreference;
import com.minedata.minenavi.common.OkHttp3Utils; import com.minedata.minenavi.mapdal.GpsTracker;
import com.minedata.minenavi.navi.GidCamera; import com.minedata.minenavi.mapdal.LatLng;
import com.minedata.minenavi.navi.GidDFM; import com.minedata.minenavi.mapdal.MineNaviUtil;
import com.minedata.minenavi.navi.GidEvent; import com.minedata.minenavi.mapdal.NativeEnv;
import com.minedata.minenavi.navi.GidLane; import com.minedata.minenavi.mapdal.PoiFavorite;
import com.minedata.minenavi.navi.GidMatchRes; import com.minedata.minenavi.mapdal.Tools;
import com.minedata.minenavi.navi.GidOption; import com.minedata.minenavi.navi.ArrowInfo;
import com.minedata.minenavi.navi.GidPoint; import com.minedata.minenavi.navi.ExpandView3;
import com.minedata.minenavi.navi.GidRemain; import com.minedata.minenavi.navi.GuidanceText;
import com.minedata.minenavi.navi.MineNaviGuide; import com.minedata.minenavi.navi.GuidanceTextGenerator;
import com.minedata.minenavi.navi.OnGuideEventListener; import com.minedata.minenavi.navi.LaneDetector;
import com.minedata.minenavi.route.MineNaviRoute; import com.minedata.minenavi.navi.LaneView;
import com.minedata.minenavi.route.PlanPoint; import com.minedata.minenavi.navi.MineNaviListener;
import com.minedata.minenavi.route.RouteInfo; import com.minedata.minenavi.navi.NaviProgressData;
import com.minedata.minenavi.route.RoutePlanOption; import com.minedata.minenavi.navi.NaviProgressMonitor;
import com.minedata.minenavi.search.common.FileSource; import com.minedata.minenavi.navi.NaviSession;
import com.minedata.minenavi.tts.TTSProvider; import com.minedata.minenavi.navi.NaviSessionData;
import com.minedata.minenavi.navi.NaviSpeaker;
import com.minedata.minenavi.navi.RouteBase;
import com.minedata.minenavi.navi.RouteCollection;
import com.minedata.minenavi.navi.RouteExplorer;
import com.minedata.minenavi.navi.RoutePlan;
import com.minedata.minenavi.navi.RouteStatus;
import com.minedata.minenavi.navi.RouterErrorInfo;
import com.minedata.minenavi.navi.SmoothNaviData;
import com.minedata.minenavi.navi.TmcSections;
import com.minedata.minenavi.navi.TurnIconModel;
import com.minedata.minenavi.navi.TurnIconView;
import com.yanzhenjie.permission.AndPermission;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
import cn.com.founder.arcgislib.R; import cn.com.founder.arcgislib.R;
import cn.com.founder.arcgislib.common.Variable; import cn.com.founder.arcgislib.common.Variable;
...@@ -72,19 +81,22 @@ import cn.com.founder.arcgislib.constants.Constants; ...@@ -72,19 +81,22 @@ import cn.com.founder.arcgislib.constants.Constants;
import cn.com.founder.arcgislib.model.PointModel; import cn.com.founder.arcgislib.model.PointModel;
import cn.com.founder.arcgislib.model.SearchModel; import cn.com.founder.arcgislib.model.SearchModel;
import cn.com.founder.arcgislib.search.listener.ISearchSelectedListener; import cn.com.founder.arcgislib.search.listener.ISearchSelectedListener;
import cn.com.founder.arcgislib.utils.DensityUtil;
import cn.com.founder.arcgislib.utils.FormatUtil;
import cn.com.founder.arcgislib.utils.GpsUtil; import cn.com.founder.arcgislib.utils.GpsUtil;
import cn.com.founder.arcgislib.utils.GsonUtil; import cn.com.founder.arcgislib.utils.GsonUtil;
import cn.com.founder.arcgislib.utils.OkHttpUtil;
import cn.com.founder.arcgislib.utils.PermissionUtil;
import cn.com.founder.arcgislib.utils.ToolUtil; import cn.com.founder.arcgislib.utils.ToolUtil;
import cn.com.founder.arcgislib.widget.navi.NaviBigMagBand; import cn.com.founder.arcgislib.widget.navi.DistanceBean;
import cn.com.founder.arcgislib.widget.navi.NaviBottomBand; import cn.com.founder.arcgislib.widget.navi.JamPath;
import cn.com.founder.arcgislib.widget.navi.NaviIndicatorBand; import cn.com.founder.arcgislib.widget.navi.MyJunctionView;
import cn.com.founder.arcgislib.widget.navi.NaviSABand; import cn.com.founder.arcgislib.widget.navi.RouteDrawStyle;
import cn.com.founder.arcgislib.widget.navi.ScreenUtil;
import cn.com.founder.arcgislib.widget.navi.SpannableBuilder;
import cn.com.founder.arcgislib.widget.navi.TimeBean;
import cn.com.founder.arcgislib.widget.navi.Utils;
import cn.com.founder.arcgislib.widget.popup.PopupLayout; import cn.com.founder.arcgislib.widget.popup.PopupLayout;
import okhttp3.Call; import okhttp3.Call;
import okhttp3.Callback; import okhttp3.Callback;
import okhttp3.ConnectionPool;
import okhttp3.MultipartBody; import okhttp3.MultipartBody;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
...@@ -94,23 +106,20 @@ import okhttp3.Response; ...@@ -94,23 +106,20 @@ import okhttp3.Response;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
* Date:2020/2/11 13:29 * Date:2021/3/25 14:24
* EMail:luo_shaopeng@founder.com.cn * EMail:luo_shaopeng@founder.com.cn
* Description:导航 * Description:导航
*/ */
public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ISearchSelectedListener { public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ISearchSelectedListener {
private static final String TAG = "ArcGisNaviView";
/**
* {@link ArcGisNaviView}
*/
protected static ArcGisNaviView instance; protected static ArcGisNaviView instance;
/** /**
* {@link Context} * {@link Context}
*/ */
private Context mContext; private Context mContext;
private View rootView;
/**
* 导航根布局
*/
private LinearLayout mNaviTotalLayout;
/** /**
* 导航图片 * 导航图片
*/ */
...@@ -120,37 +129,44 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -120,37 +129,44 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
*/ */
private ArcGisMapView mArcGisMapView; private ArcGisMapView mArcGisMapView;
/** /**
* popup * {@link ArcGisLocationView}
*/ */
private PopupLayout popupLayout; private ArcGisLocationView arcGisLocationView;
/** /**
* 底部导航布局 * {@link ArcGisSearchView}
*/ */
private View bottomNaviParentView; private ArcGisSearchView arcGisSearchView;
/** /**
* 出发地 * 设置地图缩放值
*/ */
private TextView startAddressTv; private double mapScanleValue = 0d;
/** /**
* 目的地 * 是否有搜索布局(没有的话需要新建搜索布局)
*/ */
private TextView endAddressTv; private boolean hasArcGisSearchView;
/** /**
* 是否显示开始导航 * popup
*/ */
private View bottomView; private PopupLayout bottomInputPopupLayout;
/** /**
* {@link ArcGisLocationView} * 底部输入布局
*/ */
private ArcGisLocationView arcGisLocationView; private View bottomInputParentView;
/** /**
* {@link ArcGisSearchView} * 出发地
*/ */
private ArcGisSearchView arcGisSearchView; private TextView startAddressTv;
/**
* 目的地
*/
private TextView endAddressTv;
/** /**
* 是否选择出发地 * 是否选择出发地
*/ */
private boolean isSelectStartAddress = false; private boolean isSelectStartAddress = false;
/** /**
* 出发地信息 * 出发地信息
*/ */
...@@ -160,48 +176,122 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -160,48 +176,122 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
*/ */
private SearchModel endSearchModel; private SearchModel endSearchModel;
/** /**
* 设置地图缩放值 * 底部导航布局
*/ */
private double mapScanleValue = 0d; private View bottomNaviParentView;
/**
* 底部导航文本
*/
private TextView bottomNaviTv;
/**
* 导航提示页面根布局
*/
private View naviRootView;
// 转向信息
private LinearLayout mNaviLayout;
// 导航路口剩余距离
private TextView tv_turnDistance;
// 导航路线名称
private TextView tv_turnRoadName;
// 导航转向标
private TurnIconView mTurnIconView;
// 转向动作
private TextView tv_turnAction;
// 出口
private TextView mNavingExitPortTv;
// 红绿灯
private ImageView iv_bottomTrafficLight;
// 红绿灯数
private TextView tv_trafficLightNumber;
// 剩余距离
private TextView tv_residualTimeDistance;
// 到达时间
private TextView tv_arriveTime;
// 剩余时间
private TextView tv_time;
//放大图跟布局
private LinearLayout mjunctionViewDecorView;
//放大图container
private RelativeLayout rl_junctionViewContainer;
// 导航路口剩余距离
private TextView tv_turnDistanceInJunctionView;
// 导航路线名称
private TextView tv_turnRoadNameInJunctionView;
// 导航转向标
private TurnIconView mTurnIconViewInJunctionView;
// 转向动作
private TextView tv_turnActionInJunctionView;
// 放大图
private MyJunctionView junctionView;
// 车道线
private LaneView laneView;
/** /**
* 导航 * 网络请求
*/ */
private MineNaviRoute mineNaviRoute; private OkHttpClient okHttpClient;
/** /**
* 路径信息 * 加载框
*/ */
private List<RouteInfo> routeInfoList = new ArrayList<>(); protected ProgressDialog myDialog;
/** /**
* 语音播报 * 是否互联网环境
*/ */
private TTSProvider ttsProvider; private boolean isInternetEnviron;
/** /**
* 路线导航 * 导航session
*/ */
private MineNaviGuide mineNaviGuide; private NaviSession mNaviSession;
// 起点
private String mStartName;
private Point mStartPoint = new Point();
// 途径点
private String mPassName;
private Point mPassPoint = new Point();
// 终点
private String mEndName;
private Point mEndPoint = new Point();
//tempPoint
private PointModel tempStartPoint;
private PointModel tempEndPoint;
// 导航线
private List<RouteBase> routeInfoList;
private RouteDrawStyle routeDrawStyle;
// 全程所需的时间
private int estimatedTime;
// 全程的路程长度
private int length;
// 路线规划结果集
private RouteCollection mRouteCollection = null;
/** /**
* 路径点集合 * 路径点集合
*/ */
private PointCollection mPointCollection; private PointCollection mPointCollection;
//导航板 /**
private View naviTipView; * 是否导航中
private NaviIndicatorBand naviIndicatorBand; */
private NaviBigMagBand naviBigMagBand; private boolean isNaving = false;
private RelativeLayout trafficBarLayout;
private ConstraintLayout eyeBand;
private TextView eyeSpeed, nowRoute, speed;
private ImageView eyeImage, naviLandBand;
private NaviBottomBand ll_navi_bottom_info_text;
private NaviSABand naviSABand;
private boolean isHasSearchView;
private OkHttpClient okHttpClient;
/** /**
* 加载框 * gps
*/ */
protected ProgressDialog myDialog; private GpsTracker gpsTracker = null;
private Utils mUtils;
public ArcGisNaviView(Context context, ArcGisMapView arcGisMapView, ArcGisLocationView locationView, ArcGisSearchView searchView) { public ArcGisNaviView(Context context, ArcGisMapView arcGisMapView, ArcGisLocationView locationView, ArcGisSearchView searchView) {
this(context); this(context);
...@@ -212,18 +302,19 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -212,18 +302,19 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
this.arcGisSearchView = new ArcGisSearchView(mContext, arcGisLocationView); this.arcGisSearchView = new ArcGisSearchView(mContext, arcGisLocationView);
addView(arcGisSearchView); addView(arcGisSearchView);
arcGisSearchView.setVisibility(View.GONE); arcGisSearchView.setVisibility(View.GONE);
isHasSearchView = false; hasArcGisSearchView = false;
} else { } else {
this.arcGisSearchView = searchView; this.arcGisSearchView = searchView;
isHasSearchView = true; hasArcGisSearchView = true;
} }
this.mapScanleValue = 5d * 100000 * (1.0 / 5); this.mapScanleValue = 5d * 100000 * (1.0 / 5);
this.arcGisSearchView.setSearchSelectedListener(this); this.arcGisSearchView.setSearchSelectedListener(this);
routeInfoList = new ArrayList<>();
routeDrawStyle = new RouteDrawStyle();
mPointCollection = new PointCollection(SpatialReference.create(4326)); mPointCollection = new PointCollection(SpatialReference.create(4326));
isInternetEnviron = TextUtils.isEmpty(Constants.BASE_NAVI_NETWORK_URL);
// initApig(); initStoragePermission();
// initRoute(null,null);
} }
...@@ -238,59 +329,76 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -238,59 +329,76 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
private ArcGisNaviView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { private ArcGisNaviView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr); super(context, attrs, defStyleAttr);
rootView = inflate(context, R.layout.layout_navi, this); View rootView = inflate(context, R.layout.layout_navi, this);
instance = this; instance = this;
mNaviTotalLayout = rootView.findViewById(R.id.navi_layout);
mNaviIv = rootView.findViewById(R.id.navi_iv); mNaviIv = rootView.findViewById(R.id.navi_iv);
mNaviIv.setOnClickListener(this); mNaviIv.setOnClickListener(this);
} }
protected void showDialog() { private void initStoragePermission() {
try { if (AndPermission.hasPermissions(getContext(), PermissionUtil.STORAGE_PERMISSION_GROUP)) {
if (myDialog != null && myDialog.isShowing()) { initNavi();
myDialog.dismiss(); } else {
} PermissionUtil.requestPermission(getContext(), 0, new PermissionUtil.PermissionQuestListener() {
myDialog = new ProgressDialog(mContext); @Override
myDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); public void onGranted() {
myDialog.setMessage("正在加载..."); initNavi();
myDialog.setIndeterminate(false); }
myDialog.setCancelable(false);
myDialog.show(); @Override
} catch (Exception e) { public void onDenied(List<String> data) {
}
@Override
public String onAlwaysDenied() {
return "文件读取权限失败,导航组件加载失败";
}
}, PermissionUtil.STORAGE_PERMISSION_GROUP);
} }
} }
/** /**
* 关闭 * 初始化导航
*/ */
protected void disDialog() { private void initNavi() {
try { SDKInitializer.setSearchUrl(Constants.BASE_NAVI_SEARCH_URL);
if (myDialog != null && myDialog.isShowing()) { SDKInitializer.setInverseUrl(Constants.BASE_NAVI_INVERSE_URL);
myDialog.dismiss(); SDKInitializer.setRouteingUrl(Constants.BASE_NAVI_ROUTEING_URL);
} SDKInitializer.setMonitorUrl(Constants.BASE_NAVI_NETWORK_URL);
myDialog = null; SDKInitializer.setExpandViewUrl(Constants.BASE_NAVI_EXPAND_VIEW_URL);
} catch (Exception e) { SDKInitializer.setCoordType(CoordType.WGS84);
SDKInitializer.outputLog(true);
if (!isInternetEnviron) {//互联网环境不需要鉴权
initApig();
} else {
SDKInitializer.initialize(mContext, new SDKInitializer.InitListener() {
@Override
public void onInitSuccess() {
//设置算路参数、导航使用的NaviSession
mNaviSession = NaviSession.getInstance();
mNaviSession.addMineNaviListener(mineNaviListener);
mNaviSession.enableSound(true);
mNaviSession.setDataPreference(DataPreference.onlineOnly);
}
@Override
public void onInitFailed(String msg) {
//SDK初始化失败
Toast.makeText(mContext, msg, Toast.LENGTH_LONG).show();
}
});
} }
} }
/** /**
* 华为网关鉴权 * 华为网关鉴权
*/ */
private void initApig() { private void initApig() {
showDialog(); showDialog();
if (okHttpClient == null) { if (okHttpClient == null) {
synchronized (OkHttp3Utils.class) { okHttpClient = OkHttpUtil.getInstance();
if (okHttpClient == null) {
okHttpClient = (new OkHttpClient.Builder()).connectTimeout(10L, TimeUnit.SECONDS).
writeTimeout(10L, TimeUnit.SECONDS).readTimeout(10L, TimeUnit.SECONDS)
.connectionPool(new ConnectionPool(5, 1L, TimeUnit.SECONDS))
.sslSocketFactory(ToolUtil.getSSLSocketFactory())
.hostnameVerifier(ToolUtil.getHostnameVerifier()).build();
}
}
} }
RequestBody formBodyBuilder = new okhttp3.FormBody.Builder().add("grant_type", "client_credentials") RequestBody formBodyBuilder = new okhttp3.FormBody.Builder().add("grant_type", "client_credentials")
...@@ -298,8 +406,7 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -298,8 +406,7 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
.add("client_secret", Constants.BASE_HUA_WEI_AUTH_APP_SECRET) .add("client_secret", Constants.BASE_HUA_WEI_AUTH_APP_SECRET)
.build(); .build();
Log.e("0000000", formBodyBuilder.toString()); Log.e("---APIG_URL----", Constants.BASE_APIG_URL);
Request formBodyRequest = (new okhttp3.Request.Builder()).url(Constants.BASE_APIG_URL).post(formBodyBuilder).build(); Request formBodyRequest = (new okhttp3.Request.Builder()).url(Constants.BASE_APIG_URL).post(formBodyBuilder).build();
Call call = okHttpClient.newCall(formBodyRequest); Call call = okHttpClient.newCall(formBodyRequest);
call.enqueue(new Callback() { call.enqueue(new Callback() {
...@@ -314,33 +421,35 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -314,33 +421,35 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
if (response.isSuccessful()) { if (response.isSuccessful()) {
if (response.body() != null) { if (response.body() != null) {
String responseStr = response.body().string(); String responseStr = response.body().string();
Log.e("responseStr1", responseStr);
JsonObject jsonObject = GsonUtil.gsonToBean(responseStr, JsonObject.class); JsonObject jsonObject = GsonUtil.gsonToBean(responseStr, JsonObject.class);
String appToken = jsonObject.get("access_token").getAsString(); String appToken = jsonObject.get("access_token").getAsString();
RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("account", Constants.BASE_HUA_WEI_AUTHA) RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("account", Constants.BASE_HUA_WEI_AUTHA)
.addFormDataPart("password", Constants.BASE_HUA_WEI_AUTHP).build(); .addFormDataPart("password", Constants.BASE_HUA_WEI_AUTHP).build();
Request formDataRequest = (new okhttp3.Request.Builder()).url(Constants.BASE_APIG_LOGIN_URL).addHeader("Authorization", "Bearer " + appToken).post(requestBody).build(); Log.e("---APIG_LOGIN_URL----", Constants.BASE_APIG_LOGIN_URL);
Request formDataRequest = (new okhttp3.Request.Builder()).url(Constants.BASE_APIG_LOGIN_URL)
Log.e("1111111", formDataRequest.toString()); .addHeader("Authorization", "Bearer " + appToken)
.post(requestBody)
.build();
Log.e("---formDataRequest---", formDataRequest.toString());
Call loginCall = okHttpClient.newCall(formDataRequest); Call loginCall = okHttpClient.newCall(formDataRequest);
loginCall.enqueue(new Callback() { loginCall.enqueue(new Callback() {
@Override @Override
public void onFailure(Call call, IOException e) { public void onFailure(Call call, IOException e) {
disDialog(); disDialog();
Log.e("Fail", "e=" + e.toString()); Log.e("Fail", "e=" + e.toString());
} }
@Override @Override
public void onResponse(Call call, Response response) throws IOException { public void onResponse(Call call, Response response) throws IOException {
disDialog();
if (response.isSuccessful()) { if (response.isSuccessful()) {
if (response.body() != null) { if (response.body() != null) {
String responseStr = response.body().string(); String responseStr = response.body().string();
Log.e("responseStr2", responseStr); // Log.e("---responseStr2---", responseStr);
JsonObject jsonObject = GsonUtil.gsonToBean(responseStr, JsonObject.class); JsonObject jsonObject = GsonUtil.gsonToBean(responseStr, JsonObject.class);
int status = jsonObject.get("statusCode").getAsInt(); int status = jsonObject.get("statusCode").getAsInt();
...@@ -351,10 +460,12 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -351,10 +460,12 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
JsonObject userTokenObject = resultObject.get("userToken").getAsJsonObject(); JsonObject userTokenObject = resultObject.get("userToken").getAsJsonObject();
if (userTokenObject != null) { if (userTokenObject != null) {
String userToken = userTokenObject.get("token").getAsString(); String userToken = userTokenObject.get("token").getAsString();
disDialog();
Message message = new Message(); Message message = new Message();
message.obj = appToken + "," + userToken; message.obj = appToken + "," + userToken;
mHandler.sendMessage(message); mHandler.sendMessage(message);
} }
} }
} }
...@@ -363,7 +474,15 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -363,7 +474,15 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
} }
} }
}); });
} else {
disDialog();
Log.e("responseSuccess", "body is null");
} }
} else {
disDialog();
Log.e("responseFail", response.toString());
Log.e("responseFailBody", response.body().string());
} }
} }
}); });
...@@ -374,522 +493,111 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -374,522 +493,111 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
@Override @Override
public void handleMessage(@NonNull Message msg) { public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg); super.handleMessage(msg);
String dataStr = (String) msg.obj; String dataStr = (String) msg.obj;
if (!TextUtils.isEmpty(dataStr)) { if (!TextUtils.isEmpty(dataStr)) {
String appToken = dataStr.split(",")[0]; String appToken = dataStr.split(",")[0];
String userToken = dataStr.split(",")[1]; String userToken = dataStr.split(",")[1];
Log.e("appToken", appToken);
Log.e("userToken", userToken);
initRoute(appToken, userToken);
} else {
Toast.makeText(mContext, "导航初始化失败,请重新启动", Toast.LENGTH_LONG).show();
}
}
};
private void initRoute(String appToken, String userToken) { SDKInitializer.initialize(mContext, new SDKInitializer.InitListener() {
//互联网是GCJ-02,内网是WGS-84:内网不用转,在互联网上测试时转换时先将自己的地图点(WGS-84,ArcGis(4326))转换成GCJ-02,获取到路网数据以后,再将GCJ-02转换成WGS-84坐标 @Override
if (mineNaviRoute == null) { public void onInitSuccess() {
MineNaviMain.getInstance().setNaviURL(Constants.BASE_NAVI_URL); NativeEnv.addGlobalHttpHeader("Authorization", "Bearer " + appToken);
/** NativeEnv.addGlobalHttpHeader("X-User-Token", userToken);
* 设置华为token //设置算路参数、导航使用的NaviSession
*/ mNaviSession = NaviSession.getInstance();
// MineNaviMain.getInstance().setHuaweicloudToken(appToken, userToken); mNaviSession.addMineNaviListener(mineNaviListener);
/** mNaviSession.enableSound(true);
* 获取路径 mNaviSession.setDataPreference(DataPreference.onlineOnly);
*/
MineNaviMain.getInstance().init(FileSource.getCachePath(mContext) + "/", mContext, (i, s) -> Log.e("onSdkAuthComplete", i + "#认证"));
/**
* 获取MineNaviRoute对象
*/
mineNaviRoute = MineNaviRoute.getInstance();
/**
* 初始化引擎
*/
mineNaviRoute.init(mContext);
/**
* 初始化算路Option
*/
RoutePlanOption routePlanOption = new RoutePlanOption();
/**
* 设置避让方式:RoutePlanOption.AvoidTraffic 避免拥堵,RoutePlanOption.AvoidFreey 避免高速
*/
routePlanOption.setAvoidRoadType(RoutePlanOption.AvoidTraffic | RoutePlanOption.AvoidFreey);
//车牌号
routePlanOption.setCarNumber("");
/**
* 设置算路Option
*/
mineNaviRoute.setPlanOption(routePlanOption);
/**
* 设置算路成功失败回调
*/
mineNaviRoute.setRoutePlanListener(i -> {
Toast.makeText(mContext, "i=" + i, Toast.LENGTH_LONG).show();
if (i == MineNaviRoute.ErrorCode.success || i == MineNaviRoute.ErrorCode.successAndLimit) {
routeInfoList.clear();
Toast.makeText(mContext, "路线规划完毕", Toast.LENGTH_LONG).show();
arcGisSearchView.disDialog();
if (popupLayout != null) {
popupLayout.dismiss();
} }
createNaviBt();
// 语音播报
List<Integer> mergeRouteCalcCond = mineNaviRoute.getMergeRouteCalcCond();
if (mergeRouteCalcCond != null && mergeRouteCalcCond.size() > 0) {
if (routeInfoList.size() > 0) {
routeInfoList.clear();
}
//默认加载第一条
routeInfoList.add(mineNaviRoute.getRoutePath(mergeRouteCalcCond.get(0)));
List<JamPath> coordList = routeInfoList.get(0).getCoordList();
for (int k = 0; k < coordList.size(); k++) {
List<GeoPoint> list = coordList.get(k).paths;
for (int m = 0; m < list.size(); m++) {
double[] pointArr = GpsUtil.toWGS84Point(list.get(m).getLatitude(), list.get(m).getLongitude());
mPointCollection.add(new Point(pointArr[1], pointArr[0]));
}
}
Polyline polyline = new Polyline(mPointCollection);
SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.RED, 5);
Graphic routeGraphic = new Graphic(polyline, lineSymbol);
arcGisLocationView.mNaviGraphicsOverlay.getGraphics().add(routeGraphic);
//显示所有点在屏幕内
Geometry shape = routeGraphic.getGeometry();
arcGisLocationView.mMapView.setViewpointGeometryAsync(shape, 100);
initNaviTipView();
initTTS();
initE();
} else { @Override
arcGisSearchView.disDialog(); public void onInitFailed(String msg) {
Toast.makeText(mContext, "路线规划失败", Toast.LENGTH_LONG).show(); //SDK初始化失败
Toast.makeText(mContext, msg, Toast.LENGTH_LONG).show();
} }
} else { });
arcGisSearchView.disDialog(); } else {
Toast.makeText(mContext, "路线规划失败", Toast.LENGTH_LONG).show(); Toast.makeText(mContext, "导航组件初始化失败,请重新启动", Toast.LENGTH_LONG).show();
} }
});
} }
} };
private void initNaviTipView() {
if (naviTipView == null) {
naviTipView = inflate(mContext, R.layout.layout_navi_tip, null);
naviIndicatorBand = naviTipView.findViewById(R.id.naviIndicatorBand);
naviBigMagBand = naviTipView.findViewById(R.id.naviBigMagBand);
trafficBarLayout = naviTipView.findViewById(R.id.trafficBarLayout);
eyeBand = naviTipView.findViewById(R.id.eyeBand);
eyeSpeed = naviTipView.findViewById(R.id.eyeSpeed);
eyeImage = naviTipView.findViewById(R.id.eyeImage);
naviLandBand = naviTipView.findViewById(R.id.naviLandBand);
nowRoute = naviTipView.findViewById(R.id.nowRoute);
speed = naviTipView.findViewById(R.id.speed);
ll_navi_bottom_info_text = naviTipView.findViewById(R.id.ll_navi_bottom_info_text);
naviSABand = naviTipView.findViewById(R.id.naviSABand);
addView(naviTipView);
}
}
private void initTTS() { @Override
if (ttsProvider == null) { public void onClick(View v) {
/** if (arcGisLocationView.mMapView.getCallout().isShowing()) {
* 获取TTS语音播报对象 arcGisLocationView.mLocationGraphicsOverlay.getGraphics().clear();
*/ arcGisLocationView.mNaviGraphicsOverlay.getGraphics().clear();
ttsProvider = TTSProvider.getInstance(); arcGisLocationView.mMapView.getCallout().dismiss();
/**
* 初始化tts语音播报语音功能
*/
ttsProvider.init(mContext);
} }
}
private void initE() {
if (mineNaviGuide == null) {
mineNaviGuide = MineNaviGuide.getInstance();
mineNaviGuide.init(mContext);
//如需特殊设置,请按此修改。
//导航设置Options
GidOption gidOption = new GidOption();
/**
* 设置放大图初始化大小
*
* @param width 宽 单位:像素
* @param height 高 单位:像素
*/
gidOption.setDFMSize(1000, 400);
/**
* 更改车线板图片资源
* 如需更改将图片放到assets里。图片格式只能仿造,位置不能变化。
* @param fileName 文件名
*/
gidOption.setLaneResourcesName("sprite2.png");
int landWidth = DensityUtil.dip2px(mContext, 38f);
int lineColor = Color.parseColor("#ff5453");
int backColor = Color.parseColor("#008B87");
int lineWidth = 1;
int hight = DensityUtil.dip2px(mContext, 48f);
/**
* 设置车线板图片初始化属性
* @param backcolor 背景
* @param linecolor 分割线颜色
* @param landWidth 一条车线宽度 单位:像素
* @param lineWidth 分割线宽度 单位:像素
* @param hight 车线板高度
*/
gidOption.setLaneSetting(backColor, lineColor, landWidth, lineWidth, hight);
/**
* 设置导航引导设置Options
*
* @param gidOption 导航引导设置Options
*/
mineNaviGuide.setGidOption(gidOption);
/**
* 设置导航/模拟导航事件回调监听
*/
mineNaviGuide.setGuideEventListener(new OnGuideEventListener() {
/**
* 返回导航/模拟导航的结果
* @param i 触发的事件类型
* @param o 触发的事件数据,如放大图,返回内容则是放大图类
*/
@Override
public void onGuideEvent(int i, Object o) {
switch (i) {
case GidEvent.deleteArrow:
Log.i(TAG, "删除三角");
break;
case GidEvent.newArrow:
Log.i(TAG, "三角显示");
if (o != null) { showBottomInputPopupLayout();
List<GeoPoint> gidArrow = (List<GeoPoint>) o;
if (gidArrow.size() > 0) {
Log.e(TAG, "三角显示" + gidArrow.size());
}
}
break;
case GidEvent.destArrived:
Log.i(TAG, "到达目的地");
showAllView();
bottomView.setVisibility(VISIBLE);
naviTipView.setVisibility(GONE);
arcGisLocationView.mRouteMarkerGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mMapView.setViewpointScaleAsync(mapScanleValue);
if (mineNaviGuide != null) {
mineNaviGuide.stopGuide();
mineNaviGuide.stopDemo();
}
break;
case GidEvent.expandViewHide:
Log.i(TAG, "放大图隐藏");
hintNaviBigMag();
break;
case GidEvent.expandViewShow:
Log.i(TAG, "放大图显示");
if (o != null) {
Bitmap mBitmap = null;
int maxDist = 0;
int restDist = 0;
String title = "";
int dir = 0;
//绘制路口放大图
try {
GidDFM gidMag = (GidDFM) o;
maxDist = gidMag.getMaxDist();//扩大图显示距离
restDist = gidMag.getRestDist();//扩大图剩余距离
title = gidMag.title;//扩大图标题
mBitmap = gidMag.dfmBmp;
//获取下转向方向
GidPoint simpleGidPoint = mineNaviGuide.getSimpleGidPoint();
if (simpleGidPoint != null) {
//方向
dir = simpleGidPoint.dir;
title = simpleGidPoint.name;
}
} catch (Exception e) {
mBitmap = null;
}
// 没有路口放大图时显示mOnlineExpandLayout里面的导航信息
if (mBitmap != null) {
naviBigMagBand.setImageBitmap(mBitmap);
naviBigMagBand.setInfoImage(dir);
naviBigMagBand.setNaviTitleTextView(title);
naviBigMagBand.setProgress(maxDist - restDist, maxDist);
naviBigMagBand.setNaviTextView(FormatUtil.FormatDist(restDist) + "后");
showNaviBigMag();
hintTrafficBar();
} else {
hintNaviBigMag();
showTrafficBar();
}
}
break;
case GidEvent.eyeHide:
Log.i(TAG, "电子眼隐藏");
if (o != null) {
GidCamera gidEye = (GidCamera) o;
Log.i(TAG, "电子眼隐藏" + gidEye.toString());
eyeBand.setVisibility(View.GONE);
}
break;
case GidEvent.eyeShow:
if (o != null) {
GidCamera gidEye = (GidCamera) o;
Log.i(TAG, "电子眼显示");
eyeBand.setVisibility(View.VISIBLE);
showEyeBand(gidEye.getKind(), gidEye.getLimitSpeed());
}
break;
case GidEvent.naviBegin:
Log.i(TAG, "导航开始");
ttsProvider.startSpeak("导航开始");
startNavi();
break;
case GidEvent.naviLaneHide:
Log.i(TAG, "车线板隐藏");
naviLandBand.setVisibility(View.GONE);
break;
case GidEvent.naviLaneShow:
Log.i(TAG, "车线板显示");
if (o != null) {
GidLane gidLane = (GidLane) o;
updateGidLand(gidLane);
}
break;
case GidEvent.newRoadName:
Log.i(TAG, "新路名");
if (o != null) {
String roadName = (String) o;
if (!TextUtils.isEmpty(roadName) && !roadName.equals("无名路")) {
nowRoute.setText(roadName);
nowRoute.setVisibility(View.VISIBLE);
} else {
nowRoute.setVisibility(View.GONE);
}
}
break;
case GidEvent.tracking:
GidMatchRes matchRes = null;
if (o != null) {
matchRes = (GidMatchRes) o;
speed.setText(String.valueOf(matchRes.speed));
}
GidPoint simpleGidPoint = mineNaviGuide.getSimpleGidPoint();
if (simpleGidPoint != null) {
naviIndicatorBand.setGpsAccuracyHigh(true);
naviIndicatorBand.setNaviAddressTextView(simpleGidPoint.name);
naviIndicatorBand.setNaviMarkSrc(simpleGidPoint.type, simpleGidPoint.dir);
naviIndicatorBand.setNaviSpaceTextView(FormatUtil.FormatDist(simpleGidPoint.distance) + "后");
}
GidRemain remain = mineNaviGuide.getRemain();
if (remain != null) {
int timeETA = remain.time;
int disLast = remain.dist;
showNavifootBandInfo(timeETA, disLast);
}
showServiceArea();
if (simpleGidPoint != null) {
Log.i(TAG, "====GPS回调经纬度=======" + simpleGidPoint.pos.getLatitude() + "," + simpleGidPoint.pos.getLongitude());
}
arcGisLocationView.mRouteMarkerGraphicsOverlay.getGraphics().clear();
if (matchRes != null) {
double[] pointArr = GpsUtil.toWGS84Point(matchRes.pos.getLatitude(), matchRes.pos.getLongitude());
Point point = new Point(pointArr[1], pointArr[0], SpatialReference.create(4326));
try {
BitmapDrawable bitmapDrawableNormal = (BitmapDrawable) ContextCompat
.getDrawable(mContext, R.drawable.icon_route_text_start);
PictureMarkerSymbol destinationSymbolNormal = PictureMarkerSymbol.createAsync(bitmapDrawableNormal).get();
if (matchRes.dir < 0) {
matchRes.dir += 360;
}
destinationSymbolNormal.setAngle(-matchRes.dir);
arcGisLocationView.mRouteMarkerGraphicsOverlay.getGraphics().add(new Graphic(point, destinationSymbolNormal));
arcGisLocationView.mMapView.setViewpointCenterAsync(point);
arcGisLocationView.mMapView.setViewpointScaleAsync(mapScanleValue / 20);
} catch (Exception e) {
e.printStackTrace();
}
}
// if (matchRes != null) {
// setCarPostion(new LatLng(matchRes.pos.getLatitude(), matchRes.pos.getLongitude()), matchRes.dir, 16);
// }
break;
case GidEvent.sound:
if (o != null) {
String sound = (String) o;
Log.i(TAG, "声音:" + sound);
}
break;
case GidEvent.tmcUpdated:
Log.i(TAG, "路况变化");
List<JamPath> gidCusPosList = mineNaviGuide.getGidCusPosList();
if (gidCusPosList != null && gidCusPosList.size() > 0) {
Log.i(TAG, "路况变化:" + gidCusPosList.toString());
}
GidRemain remains = mineNaviGuide.getRemain();
if (remains != null) {
Log.i(TAG, "路况变化:" + remains.toString());
}
break;
case GidEvent.rerouteComplete:
Log.i(TAG, "重新规划完成");
List<JamPath> gidCusPosLists = mineNaviGuide.getGidCusPosList();
if (gidCusPosLists != null && gidCusPosLists.size() > 0) {
Log.i(TAG, "重新规划完成:" + gidCusPosLists.toString());
}
GidRemain remainss = mineNaviGuide.getRemain();
if (remainss != null) {
Log.i(TAG, "重新规划完成" + remainss.toString());
}
break;
case GidEvent.rerouteFailed:
Log.i(TAG, "重新规划失败");
break;
}
}
});
}
} }
private void showNaviBigMag() { @Override
naviBigMagBand.setVisibility(View.VISIBLE); public void selectedResult(SearchModel searchModel) {
naviIndicatorBand.setVisibility(View.GONE); arcGisSearchView.mSearchEt.setText("");
} arcGisSearchView.setVisibility(View.GONE);
arcGisLocationView.mLocationGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mNaviGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mMapView.getCallout().dismiss();
if (isSelectStartAddress) {
startSearchModel = searchModel;
startAddressTv.setText(startSearchModel.getPoiname());
arcGisLocationView.setSearchLocation(startSearchModel.getX(), startSearchModel.getY(), Variable.SearchType.START_ADDRESS_SEARCH);
//这样写是因为会把地图上的所有点全部去除,重新绘制起点和终点
if (endSearchModel != null) {
arcGisLocationView.setSearchLocation(endSearchModel.getX(), endSearchModel.getY(), Variable.SearchType.END_ADDRESS_SEARCH);
}
} else {
endSearchModel = searchModel;
endAddressTv.setText(endSearchModel.getPoiname());
//这样写是因为会把地图上的所有点全部去除,重新绘制起点和终点
arcGisLocationView.setSearchLocation(startSearchModel.getX(), startSearchModel.getY(), Variable.SearchType.START_ADDRESS_SEARCH);
arcGisLocationView.setSearchLocation(endSearchModel.getX(), endSearchModel.getY(), Variable.SearchType.END_ADDRESS_SEARCH);
}
if (mapScanleValue != arcGisLocationView.mMapView.getMapScale()) {
arcGisLocationView.mMapView.setViewpointScaleAsync(mapScanleValue);
}
private void hintNaviBigMag() { bottomInputPopupLayout.show();
naviBigMagBand.setVisibility(View.GONE);
naviIndicatorBand.setVisibility(View.VISIBLE);
}
private void showTrafficBar() {
trafficBarLayout.setVisibility(View.VISIBLE);
} }
private void hintTrafficBar() { private void showDialog() {
trafficBarLayout.setVisibility(View.GONE); showDialog("正在加载...");
} }
/**
* 判断显示电子眼图标
*
* @param kind
* @param limitSpeed
*/
private void showEyeBand(int kind, int limitSpeed) {
switch (kind) {
//治安监控,监控拍照(交通遵守路段),隧道内监控
case GidCamera.GEType.GE_EYE_MONITOR | GidCamera.GEType.GE_EYE_REGULAR | GidCamera.GEType.GE_EYE_CHANNEL:
eyeSpeed.setVisibility(View.GONE);
eyeImage.setVisibility(View.VISIBLE);
eyeImage.setImageResource(R.drawable.icon_eye_monitor_big);
break;
case GidCamera.GEType.GE_EYE_RED_LIGHT://闯红灯
eyeSpeed.setVisibility(View.GONE);
eyeImage.setVisibility(View.VISIBLE);
eyeImage.setImageResource(R.drawable.icon_eye_light_big);
break;
case GidCamera.GEType.GE_EYE_SPEED_LIMIT://限速
eyeSpeed.setVisibility(View.VISIBLE);
eyeImage.setVisibility(View.GONE);
eyeSpeed.setText(limitSpeed + "");
break;
default:
eyeSpeed.setVisibility(View.GONE);
eyeImage.setVisibility(View.VISIBLE);
eyeImage.setImageResource(R.drawable.icon_eye_monitor_big);
break;
}
}
private void updateGidLand(GidLane gidLane) { private void showDialog(String tipMsg) {
try { try {
if (gidLane != null && gidLane.getLaneBitmap() != null) { if (myDialog != null && myDialog.isShowing()) {
naviLandBand.setImageBitmap(gidLane.getLaneBitmap()); myDialog.dismiss();
naviLandBand.setVisibility(View.VISIBLE);
} else {
naviLandBand.setVisibility(View.GONE);
} }
myDialog = new ProgressDialog(mContext);
//当前有一条车线有效,道路所有车线大于1条,6条以上车线不显示 占地方. myDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// if (gidLane != null &&gidLane.getBackgroundLane().length > 1 && gidLane.getBackgroundLane().length < 7) { myDialog.setMessage(tipMsg);
// naviLandBand.setImageBitmap(gidLane.getLaneBitmap()); myDialog.setIndeterminate(false);
// naviLandBand.setVisibility(View.VISIBLE); myDialog.setCancelable(false);
// } else { myDialog.show();
// //所有数据都是false 不显示
// naviLandBand.setVisibility(View.GONE);
// }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
}
}
} }
/** /**
* 导航底板信息显示 * 关闭
*
* @param timeETA 剩余时间 单位:毫秒
* @param disLast 剩余距离 单位:米
*/ */
private void showNavifootBandInfo(long timeETA, long disLast) { private void disDialog() {
String disStr = "剩余" + FormatUtil.FormatDistByKM(disLast) + "公里"; try {
String timeStr = FormatUtil.FormatTime3(timeETA); if (myDialog != null && myDialog.isShowing()) {
long time = System.currentTimeMillis(); myDialog.dismiss();
long endTime = timeETA + time;
Date date = new Date(endTime);
@SuppressLint("SimpleDateFormat") SimpleDateFormat format = new SimpleDateFormat("HH:mm");
ll_navi_bottom_info_text.setNaviContent("$disStr $timeStr", format.format(date) + "到达");
}
private void showServiceArea() {
List<GidPoint> saList = mineNaviGuide.getSAGidPoint();
if (saList != null && saList.size() > 0) {
if (naviSABand.getVisibility() == View.GONE) {
naviSABand.setVisibility(View.VISIBLE);
}
//第一个服务区
if (saList.size() >= 1) {
GidPoint gidPoint1 = saList.get(0);
String sidStr = FormatUtil.FormatDistOnKM(gidPoint1.distance);
String nameStr = gidPoint1.name.replace("服务区", "");
if (TextUtils.isEmpty(nameStr)) {
nameStr = "服务区";
}
naviSABand.setDis1TextView(sidStr);
naviSABand.setSa1NameTextView(nameStr);
}
//第二个服务区
if (saList.size() >= 2) {
GidPoint gidPoint2 = saList.get(1);
String sidStr = FormatUtil.FormatDistOnKM(gidPoint2.distance);
naviSABand.setDis2TextView(sidStr);
naviSABand.setSa2Show();
} else {
naviSABand.setSa2hite();
}
} else {
if (naviSABand.getVisibility() == View.VISIBLE) {
naviSABand.setVisibility(View.GONE);
} }
myDialog = null;
} catch (Exception e) {
} }
} }
...@@ -899,9 +607,9 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -899,9 +607,9 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
*/ */
public void setShowNaviLayout(boolean isShow) { public void setShowNaviLayout(boolean isShow) {
if (isShow) { if (isShow) {
mNaviTotalLayout.setVisibility(VISIBLE); mNaviIv.setVisibility(VISIBLE);
} else { } else {
mNaviTotalLayout.setVisibility(GONE); mNaviIv.setVisibility(GONE);
} }
} }
...@@ -909,32 +617,36 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -909,32 +617,36 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
* @param location {@link Variable.ViewLocation } NaviView显示位置 * @param location {@link Variable.ViewLocation } NaviView显示位置
*/ */
public void setNaviViewLocation(Variable.ViewLocation location) { public void setNaviViewLocation(Variable.ViewLocation location) {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mNaviIv.getLayoutParams();
switch (location) { switch (location) {
case LEFT_TOP: case LEFT_TOP:
mNaviTotalLayout.setGravity(Gravity.LEFT | Gravity.TOP); params.addRule(RelativeLayout.ALIGN_PARENT_LEFT | RelativeLayout.ALIGN_PARENT_TOP);
break; break;
case RIGHT_TOP: case RIGHT_TOP:
mNaviTotalLayout.setGravity(Gravity.RIGHT | Gravity.TOP); params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT | RelativeLayout.ALIGN_PARENT_TOP);
break; break;
case CENTER: case CENTER:
mNaviTotalLayout.setGravity(Gravity.CENTER); params.addRule(RelativeLayout.CENTER_IN_PARENT);
break; break;
case LEFT_BOTTOM: case LEFT_BOTTOM:
mNaviTotalLayout.setGravity(Gravity.LEFT | Gravity.BOTTOM); params.addRule(RelativeLayout.ALIGN_PARENT_LEFT | RelativeLayout.ALIGN_PARENT_BOTTOM);
break; break;
case RIGHT_BOTTOM: case RIGHT_BOTTOM:
mNaviTotalLayout.setGravity(Gravity.RIGHT | Gravity.BOTTOM); params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT | RelativeLayout.ALIGN_PARENT_BOTTOM);
break; break;
} }
mNaviIv.setLayoutParams(params);
} }
/** /**
* @param naviImage int(资源ID)-导航图片 * @param naviImage int(资源ID)-导航图片
*/ */
public void setNaviImage(int naviImage) { public void setNaviImage(int naviImage) {
mNaviIv.setImageDrawable(getResources().getDrawable(naviImage)); mNaviIv.setImageDrawable(mContext.getResources().getDrawable(naviImage));
} }
/** /**
* 自定义点开始导航 * 自定义点开始导航
* *
...@@ -943,65 +655,49 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -943,65 +655,49 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
* new PointModel(113.6242709,22.8810121,"新丽佳百货"),new PointModel(113.6351135,22.8874085,"大自然花场") * new PointModel(113.6242709,22.8810121,"新丽佳百货"),new PointModel(113.6351135,22.8874085,"大自然花场")
*/ */
public void setCustomPointNavi(PointModel startPoint, PointModel endPoint) { public void setCustomPointNavi(PointModel startPoint, PointModel endPoint) {
if (startPoint == null) { calcNaviDriveRoute(startPoint, endPoint);
Toast.makeText(mContext, "请设置起点", Toast.LENGTH_LONG).show(); }
return;
}
if (endPoint == null) {
Toast.makeText(mContext, "请设置终点", Toast.LENGTH_LONG).show(); /**
return; * 底部输入popup
*/
private void showBottomInputPopupLayout() {
if (bottomInputParentView == null) {
bottomInputParentView = View.inflate(mContext, R.layout.layout_navi_input, null);
initBottomInputView();
bottomInputPopupLayout = new PopupLayout(mContext, bottomInputParentView);
bottomInputPopupLayout.setUseRadius(true);
} }
setCustomPointNaviRoute(startPoint, endPoint); bottomInputPopupLayout.show(PopupLayout.POSITION_BOTTOM);
}
bottomInputPopupLayout.setDismissListener(() -> {
if (routeInfoList.size() > 0 && bottomNaviParentView != null) {
bottomNaviParentView.setVisibility(View.VISIBLE);
}
});
@Override if (bottomNaviParentView != null) {
public void onClick(View view) { bottomNaviParentView.setVisibility(View.GONE);
if (arcGisLocationView.mMapView.getCallout().isShowing()) {
arcGisLocationView.mLocationGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mNaviGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mMapView.getCallout().dismiss();
} }
setPopupLayout();
} }
private void setPopupLayout() {
if (bottomNaviParentView == null) {
bottomNaviParentView = View.inflate(mContext, R.layout.layout_navi_input, null);
initBottomView();
popupLayout = new PopupLayout(mContext, bottomNaviParentView);
popupLayout.setUseRadius(true);
popupLayout.setHeight((int) (ToolUtil.getScreenHeight(mContext) * 0.35), false);
}
popupLayout.show(PopupLayout.POSITION_BOTTOM);
popupLayout.setDismissListener(() -> {
if (routeInfoList.size() > 0 && bottomView != null) {
bottomView.setVisibility(View.VISIBLE);
}
});
if (bottomView != null) { /**
bottomView.setVisibility(View.GONE); * 初始化底部输入view
} */
private void initBottomInputView() {
} ImageView closeIv = bottomInputParentView.findViewById(R.id.navi_close_iv);
RelativeLayout startRl = bottomInputParentView.findViewById(R.id.navi_start_rl);
private void initBottomView() { startAddressTv = bottomInputParentView.findViewById(R.id.navi_start_address_tv);
ImageView closeIv = bottomNaviParentView.findViewById(R.id.navi_close_iv); RelativeLayout endRl = bottomInputParentView.findViewById(R.id.navi_end_rl);
RelativeLayout startRl = bottomNaviParentView.findViewById(R.id.navi_start_rl); endAddressTv = bottomInputParentView.findViewById(R.id.navi_end_address_tv);
startAddressTv = bottomNaviParentView.findViewById(R.id.navi_start_address_tv); TextView finishTv = bottomInputParentView.findViewById(R.id.navi_finish_tv);
RelativeLayout endRl = bottomNaviParentView.findViewById(R.id.navi_end_rl);
endAddressTv = bottomNaviParentView.findViewById(R.id.navi_end_address_tv);
TextView finishTv = bottomNaviParentView.findViewById(R.id.navi_finish_tv);
startAddressTv.setOnClickListener(view -> { startAddressTv.setOnClickListener(view -> {
popupLayout.dismiss(); bottomInputPopupLayout.dismiss();
isSelectStartAddress = true; isSelectStartAddress = true;
arcGisSearchView.currSearchType = Variable.SearchType.START_ADDRESS_SEARCH; arcGisSearchView.currSearchType = Variable.SearchType.START_ADDRESS_SEARCH;
arcGisSearchView.setVisibility(View.VISIBLE); arcGisSearchView.setVisibility(View.VISIBLE);
...@@ -1016,7 +712,7 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -1016,7 +712,7 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
return; return;
} }
popupLayout.dismiss(); bottomInputPopupLayout.dismiss();
isSelectStartAddress = false; isSelectStartAddress = false;
arcGisSearchView.currSearchType = Variable.SearchType.END_ADDRESS_SEARCH; arcGisSearchView.currSearchType = Variable.SearchType.END_ADDRESS_SEARCH;
arcGisSearchView.setVisibility(View.VISIBLE); arcGisSearchView.setVisibility(View.VISIBLE);
...@@ -1026,12 +722,8 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -1026,12 +722,8 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
closeIv.setOnClickListener(view -> { closeIv.setOnClickListener(view -> {
popupLayout.dismiss(); bottomInputPopupLayout.dismiss();
arcGisSearchView.currSearchType = Variable.SearchType.SEARCH; showAllView();
arcGisLocationView.currSearchType = Variable.SearchType.NONE;
arcGisLocationView.mLocationGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mNaviGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mMapView.getCallout().dismiss();
}); });
finishTv.setOnClickListener(view -> { finishTv.setOnClickListener(view -> {
String startStr = startAddressTv.getText().toString().trim(); String startStr = startAddressTv.getText().toString().trim();
...@@ -1047,176 +739,245 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -1047,176 +739,245 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
return; return;
} }
if (startSearchModel.getY() == endSearchModel.getY() && startSearchModel.getX() == endSearchModel.getX()) { PointModel startPoint = new PointModel(startSearchModel.getX(), startSearchModel.getY(), startSearchModel.getPoiname());
Toast.makeText(mContext, "出发地和目的地不能是同一地址", Toast.LENGTH_LONG).show(); PointModel endPoint = new PointModel(endSearchModel.getX(), endSearchModel.getY(), endSearchModel.getPoiname());
return;
}
setDefaultSearchNaviRoute();
});
}
private void setDefaultSearchNaviRoute() {
arcGisLocationView.mNaviGraphicsOverlay.getGraphics().clear(); calcNaviDriveRoute(startPoint, endPoint);
arcGisLocationView.setSearchLocation(startSearchModel.getX(), startSearchModel.getY(), Variable.SearchType.START_ADDRESS_SEARCH);
arcGisLocationView.setSearchLocation(endSearchModel.getX(), endSearchModel.getY(), Variable.SearchType.END_ADDRESS_SEARCH);
Log.e("startPoint", startSearchModel.getX() + "," + startSearchModel.getY() + "," + startSearchModel.getPoiname());
Log.e("endPoint", endSearchModel.getX() + "," + endSearchModel.getY() + "," + endSearchModel.getPoiname());
PlanPoint startPoint = new PlanPoint();
startPoint.name = startSearchModel.getPoiname();
double[] startPointArr = GpsUtil.toGCJ02Point(startSearchModel.getY(), startSearchModel.getX());
startPoint.pos = new GeoPoint(startPointArr[0], startPointArr[1]);
// startPoint.pos = new GeoPoint(23.014546,113.741829);
startPoint.idx = 0;
PlanPoint endPoint = new PlanPoint();
endPoint.name = endSearchModel.getPoiname();
double[] endPointArr = GpsUtil.toGCJ02Point(endSearchModel.getY(), endSearchModel.getX());
endPoint.pos = new GeoPoint(endPointArr[0], endPointArr[1]);
// endPoint.pos = new GeoPoint(22.970898,114.047684);
endPoint.idx = PlanPoint.VIA1_IDX;
/** });
* 设置开始点
*
* @param originPoint 开始点
* @return 设置成功还是失败
*/
mineNaviRoute.setOrigin(startPoint);
/**
* 设置目的地
*
* @param destPoint 目的地
* @return 设置成功还是失败
*/
mineNaviRoute.setDestination(endPoint);
mineNaviRoute.calcDriveRoute();
arcGisSearchView.showDialog();
} }
/** /**
* 自定义点开启导航 * 计算驾车路线
* *
* @param startPoint * @param startPoint 开始
* @param endPoint * @param endPoint 结束
*/ */
private void setCustomPointNaviRoute(PointModel startPoint, PointModel endPoint) { private void calcNaviDriveRoute(PointModel startPoint, PointModel endPoint) {
arcGisLocationView.mLocationGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mNaviGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mMapView.getCallout().dismiss();
if (mapScanleValue != arcGisLocationView.mMapView.getMapScale()) { if (startPoint == null || endPoint == null) {
arcGisLocationView.mMapView.setViewpointScaleAsync(mapScanleValue); Toast.makeText(mContext, "请设置地点", Toast.LENGTH_LONG).show();
return;
} }
arcGisLocationView.setSearchLocation(startPoint.getxPoint(), startPoint.getyPoint(), Variable.SearchType.START_ADDRESS_SEARCH); if (startPoint.getyPoint() == endPoint.getyPoint() && startPoint.getxPoint() == endPoint.getxPoint()) {
arcGisLocationView.setSearchLocation(endPoint.getxPoint(), endPoint.getyPoint(), Variable.SearchType.END_ADDRESS_SEARCH); Toast.makeText(mContext, "出发地和目的地不能是同一地址", Toast.LENGTH_LONG).show();
return;
PlanPoint startPlantPoint = new PlanPoint(); }
startPlantPoint.name = startPoint.getPointName();
//互联网
// double[] startPointArr = GpsUtil.toGCJ02Point(startPoint.getyPoint(), startPoint.getxPoint());
// startPlantPoint.pos = new GeoPoint(startPointArr[0], startPointArr[1]);
//公安网
startPlantPoint.pos = new GeoPoint(startPoint.getyPoint(), startPoint.getxPoint());
startPlantPoint.idx = 0;
PlanPoint endPlantPoint = new PlanPoint();
endPlantPoint.name = endPoint.getPointName();
// double[] endPointArr = GpsUtil.toGCJ02Point(endPoint.getyPoint(), endPoint.getxPoint());
// endPlantPoint.pos = new GeoPoint(endPointArr[0], endPointArr[1]);
endPlantPoint.pos = new GeoPoint(endPoint.getyPoint(), endPoint.getxPoint());
endPlantPoint.idx = PlanPoint.VIA1_IDX;
/** tempStartPoint = startPoint;
* 设置开始点 tempEndPoint = endPoint;
*
* @param originPoint 开始点
* @return 设置成功还是失败
*/
mineNaviRoute.setOrigin(startPlantPoint);
/**
* 设置目的地
*
* @param destPoint 目的地
* @return 设置成功还是失败
*/
mineNaviRoute.setDestination(endPlantPoint);
mineNaviRoute.calcDriveRoute(); if (mNaviSession == null) {
// initStoragePermission();
return;
}
showDialog("路线规划中...");
if (mapScanleValue != arcGisLocationView.mMapView.getMapScale()) {
arcGisLocationView.mMapView.setViewpointScaleAsync(mapScanleValue);
}
}
@Override
public void selectedResult(SearchModel searchModel) {
arcGisSearchView.mSearchEt.setText("");
arcGisSearchView.setVisibility(View.GONE);
arcGisLocationView.mLocationGraphicsOverlay.getGraphics().clear(); arcGisLocationView.mLocationGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mNaviGraphicsOverlay.getGraphics().clear(); if (arcGisLocationView.mManualGraphicsOverlay != null) {
arcGisLocationView.mMapView.getCallout().dismiss(); if (arcGisLocationView.mManualGraphicsOverlay.getGraphics() != null) {
if (isSelectStartAddress) { arcGisLocationView.mManualGraphicsOverlay.getGraphics().clear();
startSearchModel = searchModel;
startAddressTv.setText(startSearchModel.getPoiname());
arcGisLocationView.setSearchLocation(startSearchModel.getX(), startSearchModel.getY(), Variable.SearchType.START_ADDRESS_SEARCH);
//这样写是因为会把地图上的所有点全部去除,重新绘制起点和终点
if (endSearchModel != null) {
arcGisLocationView.setSearchLocation(endSearchModel.getX(), endSearchModel.getY(), Variable.SearchType.END_ADDRESS_SEARCH);
} }
} else {
endSearchModel = searchModel;
endAddressTv.setText(endSearchModel.getPoiname());
//这样写是因为会把地图上的所有点全部去除,重新绘制起点和终点
arcGisLocationView.setSearchLocation(startSearchModel.getX(), startSearchModel.getY(), Variable.SearchType.START_ADDRESS_SEARCH);
arcGisLocationView.setSearchLocation(endSearchModel.getX(), endSearchModel.getY(), Variable.SearchType.END_ADDRESS_SEARCH);
} }
if (mapScanleValue != arcGisLocationView.mMapView.getMapScale()) {
arcGisLocationView.mMapView.setViewpointScaleAsync(mapScanleValue); arcGisLocationView.mNaviGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mRouteMarkerGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mMapView.getCallout().dismiss();
pointHandler.sendEmptyMessage(0);
List<PoiFavorite> wayPoints = new ArrayList<>();
if (!isInternetEnviron) {//内网
mStartPoint = Tools.latLngToPoint(new LatLng(startPoint.getyPoint(), startPoint.getxPoint()));
mStartName = !TextUtils.isEmpty(startPoint.getPointName()) ? startPoint.getPointName() : "未知名称";
mEndPoint = Tools.latLngToPoint(new LatLng(endPoint.getyPoint(), endPoint.getxPoint()));
mEndName = !TextUtils.isEmpty(endPoint.getPointName()) ? endPoint.getPointName() : "未知名称";
} else {//互联网环境
double[] startPointArr = GpsUtil.toGCJ02Point(startPoint.getyPoint(), startPoint.getxPoint());
mStartPoint = Tools.latLngToPoint(new LatLng(startPointArr[0], startPointArr[1]));
mStartName = !TextUtils.isEmpty(startPoint.getPointName()) ? startPoint.getPointName() : "未知名称";
double[] endPointArr = GpsUtil.toGCJ02Point(endPoint.getyPoint(), endPoint.getxPoint());
mEndPoint = Tools.latLngToPoint(new LatLng(endPointArr[0], endPointArr[1]));
mEndName = !TextUtils.isEmpty(endPoint.getPointName()) ? endPoint.getPointName() : "未知名称";
} }
popupLayout.show(); PoiFavorite resultStartPoint = new PoiFavorite(mStartPoint, mStartName);
PoiFavorite resultEndPoint = new PoiFavorite(mEndPoint, mEndName);
RoutePlan routePlan = new RoutePlan();
mNaviSession.calculateDriveRoute(resultStartPoint, wayPoints, resultEndPoint, routePlan, NaviSession.RouteMethod.multipleResult);
} }
private void createNaviBt() { @SuppressLint("HandlerLeak")
if (bottomView == null) { Handler pointHandler = new Handler() {
bottomView = inflate(mContext, R.layout.layout_navi_bottom, null); @Override
TextView naviTv = bottomView.findViewById(R.id.navi_start_tv); public void handleMessage(@NonNull Message msg) {
naviTv.setOnClickListener(view -> { super.handleMessage(msg);
arcGisLocationView.setSearchLocation(tempStartPoint.getxPoint(), tempStartPoint.getyPoint(), Variable.SearchType.START_ADDRESS_SEARCH);
arcGisLocationView.setSearchLocation(tempEndPoint.getxPoint(), tempEndPoint.getyPoint(), Variable.SearchType.END_ADDRESS_SEARCH);
}
};
/**
* 显示底部导航按钮
*/
private void showBottomNaviBtnLatout() {
bottomNaviParentView = inflate(mContext, R.layout.layout_navi_bottom, null);
LinearLayout mBottomLayout = bottomNaviParentView.findViewById(R.id.bottom_navi_ll);
TextView mTitle = bottomNaviParentView.findViewById(R.id.bottom_navi_title_tv);
ImageView mCloseIv = bottomNaviParentView.findViewById(R.id.bottom_navi_close_iv);
TextView mAddressLabelTv = bottomNaviParentView.findViewById(R.id.navi_address_label);
ImageView mAddressArrowIv = bottomNaviParentView.findViewById(R.id.navi_address_arrow);
TextView mStartAddressTv = bottomNaviParentView.findViewById(R.id.navi_start_address);
TextView mEndAddressTv = bottomNaviParentView.findViewById(R.id.navi_end_address);
TextView mDistanceLabelTv = bottomNaviParentView.findViewById(R.id.navi_distance_label);
TextView mDistanceTv = bottomNaviParentView.findViewById(R.id.navi_distance);
TextView mTimeLabelTv = bottomNaviParentView.findViewById(R.id.navi_time_label);
TextView mTimeTv = bottomNaviParentView.findViewById(R.id.navi_time);
bottomNaviTv = bottomNaviParentView.findViewById(R.id.navi_start_tv);
bottomNaviTv.setText(mContext.getString(R.string.string_navi_start_navi));
mStartAddressTv.setText(tempStartPoint.getPointName());
mEndAddressTv.setText(tempEndPoint.getPointName());
mDistanceTv.setText(String.format("%s公里", ToolUtil.getRoadLenght(length)));
mTimeTv.setText(String.format("%s", ToolUtil.getRoadTime(estimatedTime)));
mCloseIv.setOnClickListener(v -> {
showAllView();
bottomNaviParentView.setVisibility(View.GONE);
});
bottomNaviTv.setOnClickListener(view -> {
if (isNaving) {
if (mNaviSession.isInSimulation()) {
mNaviSession.endSimulation();
}
isNaving = false;
mNaviLayout.setVisibility(GONE);
showAllView();
bottomNaviParentView.setVisibility(View.GONE);
NaviSpeaker.enqueue("退出导航");
Toast.makeText(mContext, "退出导航", Toast.LENGTH_LONG).show();
} else {
mBottomLayout.setBackgroundColor(ContextCompat.getColor(mContext, R.color.colorTrans));
mTitle.setVisibility(View.GONE);
mCloseIv.setVisibility(View.GONE);
mAddressLabelTv.setVisibility(View.GONE);
mAddressArrowIv.setVisibility(View.GONE);
mStartAddressTv.setVisibility(View.GONE);
mEndAddressTv.setVisibility(View.GONE);
mDistanceLabelTv.setVisibility(View.GONE);
mDistanceTv.setVisibility(View.GONE);
mTimeLabelTv.setVisibility(View.GONE);
mTimeTv.setVisibility(View.GONE);
startNavi(); startNavi();
// mineNaviGuide.startDemo(); }
// mineNaviGuide.setDemoSpeed(MineNaviGuide.DEMO_SPEED_Middle);
});
//导航
mineNaviGuide.startGuide();
});
addView(bottomView);
}
bottomView.setVisibility(View.VISIBLE); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
layoutParams.gravity = Gravity.BOTTOM;
addView(bottomNaviParentView, layoutParams);
} }
/**
* 开始导航
*/
private void startNavi() { private void startNavi() {
Toast.makeText(mContext, "开始导航", Toast.LENGTH_LONG).show(); isNaving = true;
ttsProvider.startSpeak("导航开始"); NaviSpeaker.enqueue("导航开始");
bottomNaviTv.setText(mContext.getString(R.string.string_navi_quit_navi));
((Activity) mContext).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//屏幕常亮
initNaviRootView();
initNaviSetting();
// normalNavi();
if (bottomView != null) { if(!isInternetEnviron){
bottomView.setVisibility(View.GONE); normalNavi();
naviTipView.setVisibility(View.VISIBLE); }else{
simulationNavi();
}
}
/**
* 模拟导航
*/
private void simulationNavi() {
mNaviLayout.setVisibility(VISIBLE);
mNaviSession.takeRoute(mRouteCollection.routes[0]);
NaviSpeaker.stop();
// 设置速度
mNaviSession.setEmulatorNaviSpeed(10.0f);
// 开始导航
mNaviSession.startSimulation();
//设置图标
setNaviIcon(mPointCollection.get(0), 0);
}
/**
* 正常导航
*/
private void normalNavi() {
mNaviLayout.setVisibility(VISIBLE);
mNaviSession.takeRoute(mRouteCollection.routes[0]);
setNaviIcon(mPointCollection.get(0), 0);
// arcGisLocationView.setShowMap(false);
// arcGisLocationView.startLocation(mapScanleValue);
}
private void setNaviIcon(com.esri.arcgisruntime.geometry.Point point, float carOri) {
try {
BitmapDrawable bitmapDrawableNormal = (BitmapDrawable) ContextCompat
.getDrawable(mContext, R.drawable.icon_route_text_start);
PictureMarkerSymbol destinationSymbolNormal = PictureMarkerSymbol.createAsync(bitmapDrawableNormal).get();
if (carOri < 0) {
carOri += 360;
}
destinationSymbolNormal.setAngle(carOri);
arcGisLocationView.mRouteMarkerGraphicsOverlay.getGraphics().add(new Graphic(point, destinationSymbolNormal));
arcGisLocationView.mMapView.setViewpointCenterAsync(point);
arcGisLocationView.mMapView.setViewpointScaleAsync(mapScanleValue / 20);
arcGisLocationView.mMapView.setViewpointRotationAsync(-carOri);
} catch (Exception e) {
e.printStackTrace();
} }
hideAllView();
((Activity) mContext).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//屏幕常亮
} }
private void showAllView() { private void showAllView() {
arcGisSearchView.currSearchType = Variable.SearchType.SEARCH;
arcGisLocationView.currSearchType = Variable.SearchType.NONE;
arcGisLocationView.mNaviGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mRouteMarkerGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mMapView.setViewpointRotationAsync(0);
arcGisLocationView.mLocationIv.performClick();
if (ArcGisLocationView.instance != null) { if (ArcGisLocationView.instance != null) {
ArcGisLocationView.instance.setVisibility(View.VISIBLE); ArcGisLocationView.instance.setVisibility(View.VISIBLE);
} }
if (ArcGisSearchView.instance != null) { if (ArcGisSearchView.instance != null) {
if (isHasSearchView) { if (hasArcGisSearchView) {
ArcGisSearchView.instance.setVisibility(View.VISIBLE); ArcGisSearchView.instance.setVisibility(View.VISIBLE);
} else { } else {
ArcGisSearchView.instance.setVisibility(View.GONE); ArcGisSearchView.instance.setVisibility(View.GONE);
...@@ -1236,6 +997,9 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -1236,6 +997,9 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
} }
/**
* 隐藏全部view
*/
private void hideAllView() { private void hideAllView() {
if (ArcGisLocationView.instance != null) { if (ArcGisLocationView.instance != null) {
ArcGisLocationView.instance.setVisibility(View.GONE); ArcGisLocationView.instance.setVisibility(View.GONE);
...@@ -1256,6 +1020,590 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -1256,6 +1020,590 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
} }
} }
/**
* 算路、导航事件回调
*/
private final MineNaviListener mineNaviListener = new MineNaviListener() {
/**
* 路线规划成功
*/
@Override
public void onCalculateRouteSuccess(RouteCollection data) {
disDialog();
if (data == null) {
Toast.makeText(mContext, "没有路线信息", Toast.LENGTH_LONG).show();
return;
}
Toast.makeText(mContext, "路线规划完毕", Toast.LENGTH_LONG).show();
if (bottomInputPopupLayout != null) {
bottomInputPopupLayout.dismiss();
}
// 获取路线规划信息
mRouteCollection = data;
routeDrawStyle.setRouteDrawStyle(RouteDrawStyle.RouteStyleE.common);
// 当前路程全程所需的时间,单位秒
estimatedTime = mRouteCollection.routes[0].getEstimatedTime();
// 当前路程全程的距离,单位米
length = mRouteCollection.routes[0].getLength();
showBottomNaviBtnLatout();
hideAllView();
// 获取路线
drawRoute(mRouteCollection);
}
/**
* 路线规划失败
*/
@Override
public void onCalculateRouteFailed(RouterErrorInfo data) {
disDialog();
//算路失败
RouterErrorInfo re = data;
Log.e("onCalculateRouteFailed", re.errCode + "");
String msg = null;
switch (re.errCode) {
case RouterErrorInfo.Type.ComputeFailed:
msg = "路线计算失败";
break;
case RouterErrorInfo.Type.destAuthError:
msg = "终点所在位置数据授权错误";
break;
case RouterErrorInfo.Type.destNoData:
msg = "重点所在位置没有数据";
break;
case RouterErrorInfo.Type.MissingSubfiles:
msg = "缺少途径省份数据";
break;
case RouterErrorInfo.Type.NetworkError:
msg = "网络连接错误";
break;
case RouterErrorInfo.Type.None:
// 没有错误信息
break;
case RouterErrorInfo.Type.NotEnoughMemory:
msg = "没有足够的内存可以使用";
break;
case RouterErrorInfo.Type.oriAuthError:
msg = "起点所在位置数据授权错误";
break;
case RouterErrorInfo.Type.OriDestTooNear:
msg = "起点和终点距离太近";
break;
case RouterErrorInfo.Type.oriNoData:
msg = "起点所在位置没有数据";
break;
case RouterErrorInfo.Type.SetDestFailed:
msg = "设置终点失败";
break;
case RouterErrorInfo.Type.SetOriFailed:
msg = "设置起点失败";
break;
case RouterErrorInfo.Type.waypointAuthError:
msg = "途经点所在位置数据授权错误";
break;
case RouterErrorInfo.Type.waypointNoData:
msg = "途经点所在位置没有数据";
break;
}
if (msg != null) {
Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
}
NaviSpeaker.enqueue("路线规划失败"); // 关闭等待
}
/**
* 到达目的地
*/
@Override
public void onArriveDestination() {
NaviSpeaker.enqueue("导航结束");
Toast.makeText(mContext, "导航结束", Toast.LENGTH_LONG).show();
if (mNaviSession.isInSimulation()) {
mNaviSession.endSimulation();
}
// 隐藏导航信息
mNaviLayout.setVisibility(GONE);
showAllView();
bottomNaviParentView.setVisibility(View.GONE);
isNaving = false;
}
/**
* 需要重新算路
*/
@Override
public void onNeedsReroute() {
}
/**
* 当前有新的转弯箭头需要显示
*/
@Override
public void onNewArrow(ArrowInfo arrowInfo) {
}
/**
* 当前转弯箭头不需要显示
*/
@Override
public void onDeleteArrow() {
}
/**
* 采纳新路线
*/
@Override
public void onNewRouteTaken() {
}
/**
* 重算路取消
*/
@Override
public void onRerouteCancelled() {
}
/**
* 重算路完成
*/
@Override
public void onRerouteComplete(RouteBase data) {
}
/**
* 重算路失败
*/
@Override
public void onRerouteFailed(RouterErrorInfo data) {
}
/**
* 开始重算路
*/
@Override
public void onRerouteStarted() {
}
/**
* 算路取消
*/
@Override
public void onRouteCancelled() {
}
/**
* 算路开始
*/
@Override
public void onRouteStarted() {
}
/**
* 正在算路中
*/
@Override
public void onRouting() {
}
/**
* 模拟导航开始
*/
@Override
public void onSimNaviBegin() {
}
@Override
public void onEndEmulatorNavi() {
NaviSpeaker.enqueue("导航结束");
Toast.makeText(mContext, "导航结束", Toast.LENGTH_LONG).show();
if (mNaviSession.isInSimulation()) {
mNaviSession.endSimulation();
}
// 隐藏导航信息
mNaviLayout.setVisibility(GONE);
showAllView();
bottomNaviParentView.setVisibility(View.GONE);
isNaving = false;
}
/**
* 车的位置发生改变
*/
@Override
public void onTracking(NaviSessionData data) {
if (isNaving) {
arcGisLocationView.mRouteMarkerGraphicsOverlay.getGraphics().clear();
float carOri = data.carOri;
com.esri.arcgisruntime.geometry.Point point;
LatLng latLng = Tools.pointToLatLng(data.carPos);
if (!isInternetEnviron) {
point = new com.esri.arcgisruntime.geometry.Point(latLng.longitude, latLng.latitude);
} else {
double[] pointArr = GpsUtil.toWGS84Point(latLng.latitude, latLng.longitude);
point = new com.esri.arcgisruntime.geometry.Point(pointArr[1], pointArr[0]);
}
setNaviIcon(point, carOri);
}
}
/**
* 导航时平滑跟踪车
*/
@Override
public void onSmoothTracking(SmoothNaviData data) {
}
};
/**
* 添加导航线
*/
private void drawRoute(RouteCollection routeCollection) {
routeInfoList.clear();
routeInfoList.addAll(Arrays.asList(routeCollection.routes));
showRoutePath();
}
/**
* 描画路线
*/
private void showRoutePath() {
//每次描绘前都要清楚上次的描绘。
mPointCollection.clear();
//目前只简单显示第一条路线
RouteBase routeInfo0 = routeInfoList.get(0);
List<JamPath> jamPathList0 = JamPath.convertRouteBaseToJamPath(routeInfo0);
for (int k = 0; k < jamPathList0.size(); k++) {
JamPath jamPath = jamPathList0.get(k);
List<LatLng> list = jamPath.paths;
for (int m = 0; m < list.size(); m++) {
if (!isInternetEnviron) {
com.esri.arcgisruntime.geometry.Point point = new com.esri.arcgisruntime.geometry.Point(list.get(m).longitude, list.get(m).latitude);
mPointCollection.add(point);
} else {
double[] pointArr = GpsUtil.toWGS84Point(list.get(m).latitude, list.get(m).longitude);
com.esri.arcgisruntime.geometry.Point point = new com.esri.arcgisruntime.geometry.Point(pointArr[1], pointArr[0]);
mPointCollection.add(point);
}
}
}
Polyline polyline = new Polyline(mPointCollection);
SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, ContextCompat.getColor(mContext, R.color.mask_tmc_1), 5);
Graphic routeGraphic = new Graphic(polyline, lineSymbol);
arcGisLocationView.mNaviGraphicsOverlay.getGraphics().add(routeGraphic);
//显示所有点在屏幕内
Geometry shape = routeGraphic.getGeometry();
arcGisLocationView.mMapView.setViewpointGeometryAsync(shape, 100);
}
/**
* 导航root布局
*/
private void initNaviRootView() {
naviRootView = inflate(mContext, R.layout.layout_navi_root, null);
// 导航信息
mNaviLayout = naviRootView.findViewById(R.id.ll_navi_information);
// 导航路口剩余距离
tv_turnDistance = mNaviLayout.findViewById(R.id.tv_turnDistance);
// 导航路线名称
tv_turnRoadName = mNaviLayout.findViewById(R.id.tv_turnRoadName);
//导航标
mTurnIconView = mNaviLayout.findViewById(R.id.turnIconView);
// 转向动作
tv_turnAction = mNaviLayout.findViewById(R.id.tv_turnAction);
// 出口
mNavingExitPortTv = mNaviLayout.findViewById(R.id.tv_naving_exit_port);
// 交通灯
iv_bottomTrafficLight = mNaviLayout.findViewById(R.id.iv_bottomTrafficLight);
// 交通灯数量
tv_trafficLightNumber = mNaviLayout.findViewById(R.id.tv_trafficLightNumber);
// 剩余的时间和距离
tv_residualTimeDistance = mNaviLayout.findViewById(R.id.tv_residualTimeDistance);
// 到达时间
tv_arriveTime = mNaviLayout.findViewById(R.id.tv_arriveTime);
// 预估时间
tv_time = mNaviLayout.findViewById(R.id.tv_time);
// 放大图
mjunctionViewDecorView = naviRootView.findViewById(R.id.ll_junctionViewDecorView);
// 放大图container
rl_junctionViewContainer = mjunctionViewDecorView.findViewById(R.id.rl_junctionViewContainer);
// 导航路口剩余距离
tv_turnDistanceInJunctionView = mjunctionViewDecorView.findViewById(R.id.tv_turnDistanceInJunctionView);
// 导航路线名称
tv_turnRoadNameInJunctionView = mjunctionViewDecorView.findViewById(R.id.tv_turnRoadNameInJunctionView);
//导航标
mTurnIconViewInJunctionView = mjunctionViewDecorView.findViewById(R.id.turnIconViewInJunctionView);
// 转向动作
tv_turnActionInJunctionView = mjunctionViewDecorView.findViewById(R.id.tv_turnActionInJunctionView);
// 车道线
laneView = naviRootView.findViewById(R.id.naviLandBand);
//放大图设置
junctionView = new MyJunctionView(mContext);
ExpandView3.setUrlBase(ExpandView3.UrlType.roadnet, Constants.BASE_NAVI_EXPAND_VIEW_URL);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
rl_junctionViewContainer.addView(junctionView, layoutParams);
junctionView.setOnClickListener(v -> {
enableShowJunctionView(false);
});
junctionView.setOnJunctionViewListener((gl, config) -> {
ExpandView3.setUrlBase(ExpandView3.UrlType.roadnet, Constants.BASE_NAVI_EXPAND_VIEW_URL);
ExpandView3.enableV4(true);
//设置在线路口放大图数据模式
ExpandView3.setDataPreference(DataPreference.onlineOnly);
junctionView.addEventHandler(event -> {
switch (event) {
case ExpandView3.Event.show:
enableShowJunctionView(true);
break;
case ExpandView3.Event.hide:
enableShowJunctionView(false);
break;
}
});
});
//车道图设置
laneView.addListener((event, data) -> {
switch (event) {
case LaneDetector.Event.showImages:
laneView.setVisibility(VISIBLE);
break;
case LaneDetector.Event.hideImages:
laneView.setVisibility(GONE);
break;
}
});
FrameLayout.LayoutParams rootParams = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
rootParams.gravity = Gravity.TOP;
addView(naviRootView, rootParams);
}
private void initNaviSetting() {
//定位设置
if (gpsTracker == null) {
gpsTracker = GpsTracker.getInstance();
}
gpsTracker.registerGpsTrackerListener((i, o) -> {
switch (i) {
case GpsTracker.GPSEvent.disconnected:
Toast.makeText(mContext, "GPS未连接,请开启GPS", Toast.LENGTH_LONG).show();
break;
case GpsTracker.GPSEvent.connected:
//连接上GPS,就消失对话框
Toast.makeText(mContext, "GPS已连接", Toast.LENGTH_LONG).show();
break;
}
}, null);
//导航信息设置
NaviProgressMonitor.getInstance().addListener(mNaviProgressUpdatedListener);
GuidanceTextGenerator mGuidanceTextGenerator = new GuidanceTextGenerator();
mGuidanceTextGenerator.addListener(mGuidanceTextGeneratorChangedListener);
ScreenUtil.getInstance().init(mContext, ((Activity) mContext).getWindow());
mUtils = new Utils();
mUtils.init(mContext);
}
/**
* 显示/隐藏放大图
*/
private void enableShowJunctionView(boolean enable) {
if (!isNaving) {
return;
}
if (enable) {
mNaviLayout.setVisibility(GONE);
mjunctionViewDecorView.setVisibility(VISIBLE);
rl_junctionViewContainer.setVisibility(VISIBLE);
junctionView.setVisibility(VISIBLE);
junctionView.requestRender();
} else {
mjunctionViewDecorView.setVisibility(INVISIBLE);
junctionView.setVisibility(INVISIBLE);
rl_junctionViewContainer.setVisibility(INVISIBLE);
mNaviLayout.setVisibility(VISIBLE);
}
}
/**
* 导航信息更新监听
*/
private final NaviProgressMonitor.NaviProgressUpdatedListener mNaviProgressUpdatedListener = new NaviProgressMonitor.NaviProgressUpdatedListener() {
@Override
public void onDataUpdated(NaviProgressData naviProgressData) {
if (isNaving) {
setResidualDistance(naviProgressData.remainingTime, naviProgressData.routeLength - naviProgressData.curDistance);
setResidualTime(naviProgressData);
int remainingTrafficLightCount = mRouteCollection.routes[0].calculateTrafficLightCountInDistanceRange(naviProgressData.curDistance, naviProgressData.routeLength);
RouteStatus statusByRoute = RouteExplorer.getInstance().getStatusByRoute(mRouteCollection.routes[0]);
if (statusByRoute != null && statusByRoute.remainingDistance < 100 * 1000) {
iv_bottomTrafficLight.setVisibility(VISIBLE);
tv_trafficLightNumber.setVisibility(VISIBLE);
tv_trafficLightNumber.setText(remainingTrafficLightCount + "");
} else {
iv_bottomTrafficLight.setVisibility(GONE);
tv_trafficLightNumber.setVisibility(GONE);
}
}
}
@Override
public void onTiBarUpdated(final TmcSections tmcSections) {
}
};
/**
* 导航引导信息更新监听
*/
private final GuidanceTextGenerator.GuidanceTextGeneratorChangedListener mGuidanceTextGeneratorChangedListener = new GuidanceTextGenerator.GuidanceTextGeneratorChangedListener() {
@Override
public void onTextChanged(GuidanceText guidanceText) {
if (isNaving) {
if (guidanceText.icon == GuidanceText.GuidanceTextIcon.exit) {
mNavingExitPortTv.setVisibility(View.VISIBLE);
if (TextUtils.isEmpty(guidanceText.exitNumber)) {
mNavingExitPortTv.setText("出口");
} else {
mNavingExitPortTv.setText(String.format("出口%s", mUtils.toDBC(guidanceText.exitNumber)));
}
} else {
mNavingExitPortTv.setVisibility(View.GONE);
}
if (guidanceText.turnIconModel.valid) {
switch (guidanceText.turnIconModel.type) {
case TurnIconModel.Type.junction:
case TurnIconModel.Type.rotary:
mTurnIconView.setTurnIconModel(guidanceText.turnIconModel);
mTurnIconViewInJunctionView.setTurnIconModel(guidanceText.turnIconModel);
break;
case TurnIconModel.Type.iconId:
mTurnIconView.setTurnIconId(guidanceText.turnIconModel.iconId);
mTurnIconViewInJunctionView.setTurnIconId(guidanceText.turnIconModel.iconId);
break;
}
} else {
mTurnIconView.setTurnIconId(guidanceText.turnIconModel.iconId);
mTurnIconViewInJunctionView.setTurnIconId(guidanceText.turnIconModel.iconId);
}
tv_turnAction.setText(guidanceText.action);
tv_turnActionInJunctionView.setText(guidanceText.action);
tv_turnRoadName.setText(mUtils.toDBC(guidanceText.name));
tv_turnRoadNameInJunctionView.setText(mUtils.toDBC(guidanceText.name));
}
}
@Override
public void onDistanceChanged(int distance) {
if (isNaving) {
DistanceBean distanceBean = mUtils.formatDistance(distance, false);
Spannable distanceToTurnInJunctionViewSpannable = SpannableBuilder.create(mContext).append(distanceBean.distanceValue, R.dimen.nz_px_60, R.color.white)
.append(distanceBean.distanceUnit, R.dimen.nz_px_30, R.color.white)
.build();
tv_turnDistance.setText(distanceToTurnInJunctionViewSpannable);
tv_turnDistanceInJunctionView.setText(distanceToTurnInJunctionViewSpannable);
}
}
};
/**
* 设置剩余行程距离时间
*/
private void setResidualDistance(int hour, int distance) {
DistanceBean distanceBean = mUtils.formatDistance(distance, false);
TimeBean timeBean = mUtils.calcTimeBean(hour);
if (tv_residualTimeDistance.getVisibility() == VISIBLE) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(distanceBean.distanceValue).append(distanceBean.distanceUnit);
tv_residualTimeDistance.setText(stringBuilder.toString());
stringBuilder.delete(0, stringBuilder.length());
stringBuilder.append("剩余").append(timeBean.hour == 0 ? "" : timeBean.hour + "")
.append(timeBean.hour == 0 ? "" : "小时").append(timeBean.minute + "").append(timeBean.hour == 0 ? "分钟" : "分");
tv_time.setText(stringBuilder);
}
}
/**
* 设置到达时间
*/
private void setResidualTime(NaviProgressData naviProgressData) {
if (naviProgressData == null)
return;
String s_arriveTime = MineNaviUtil.relativeTimeStringFromNow(naviProgressData.remainingTime, mUtils.is24Hour());
StringBuilder stringBuilder = new StringBuilder();
if (s_arriveTime.contains("天")) {
stringBuilder.append("预计").append(s_arriveTime.substring(0, s_arriveTime.indexOf("天") + 1) + "\n").
append(s_arriveTime.substring(s_arriveTime.indexOf("天") + 1, s_arriveTime.length())).append("到达");
} else if (s_arriveTime.contains("日")) {
stringBuilder.append("预计").append(s_arriveTime.substring(0, s_arriveTime.indexOf("日") + 1) + "\n").
append(s_arriveTime.substring(s_arriveTime.indexOf("日") + 1, s_arriveTime.length())).append("到达");
} else {
stringBuilder.append("预计\n").append(s_arriveTime).append("到达");
}
tv_arriveTime.setText(stringBuilder.toString());
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 是否触发按键为back键
if (keyCode == KeyEvent.KEYCODE_BACK) {
return isNaving;
}
// 如果不是back键正常响应
return super.onKeyDown(keyCode, event);
}
@Override @Override
protected void onWindowVisibilityChanged(int visibility) { protected void onWindowVisibilityChanged(int visibility) {
super.onWindowVisibilityChanged(visibility); super.onWindowVisibilityChanged(visibility);
...@@ -1264,11 +1612,13 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -1264,11 +1612,13 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
break; break;
case 8://onDestory case 8://onDestory
if (mineNaviGuide != null) { //退出当前页面的时候清理GPS定位监听
mineNaviGuide.stopGuide(); if (gpsTracker != null) {
mineNaviGuide.stopDemo(); gpsTracker.unregisterGpsTrackerListener();
} }
break; break;
} }
} }
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/navi_layout" android:id="@+id/navi_layout"
style="@style/MatchParent" style="@style/MatchParent"
android:orientation="vertical" android:orientation="vertical"
android:layout_marginTop="@dimen/dimen_block_20"
android:layout_marginLeft="@dimen/dimen_block_10"
android:layout_marginRight="@dimen/dimen_block_10"
android:layout_marginBottom="@dimen/dimen_block_20"
android:gravity="right|top"
> >
<ImageView <ImageView
android:id="@+id/navi_iv" android:id="@+id/navi_iv"
style="@style/WrapContent" style="@style/WrapContent"
android:src="@drawable/icon_route_navi" android:src="@drawable/icon_route_navi"
android:layout_alignParentRight="true"
android:paddingTop="@dimen/dimen_block_20"
android:paddingLeft="@dimen/dimen_block_10"
android:paddingRight="@dimen/dimen_block_10"
android:paddingBottom="@dimen/dimen_block_20"
/> />
</LinearLayout> </RelativeLayout>
\ No newline at end of file \ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/bottom_navi_ll"
android:orientation="vertical" android:orientation="vertical"
android:layout_width="match_parent" style="@style/WrapContent.WidthMatchParent"
android:layout_height="match_parent" android:padding="@dimen/dimen_block_10"
android:gravity="bottom|center"> android:gravity="bottom|center"
android:background="@color/colorWhite"
>
<RelativeLayout style="@style/WrapContent.WidthMatchParent">
<ImageView
android:id="@+id/bottom_navi_close_iv"
style="@style/WrapContent"
android:src="@drawable/icon_gray_close"
android:layout_alignParentRight="true"
android:paddingTop="@dimen/dimen_block_10"
android:paddingBottom="@dimen/dimen_block_10"
android:paddingLeft="@dimen/dimen_block_10" />
<TextView
android:id="@+id/bottom_navi_title_tv"
style="@style/WrapContent.main_text_style"
android:text="@string/string_navi_navi_detail"
android:layout_centerInParent="true" />
</RelativeLayout>
<LinearLayout
style="@style/WrapContent.WidthMatchParent"
android:orientation="horizontal">
<TextView
android:id="@+id/navi_address_label"
style="@style/WrapContent"
android:text="路\u3000线:"
android:textColor="@color/color_666666"
android:textSize="@dimen/dimen_font_16sp"
android:layout_gravity="center_vertical"
/>
<TextView
android:id="@+id/navi_start_address"
style="@style/WrapContent"
android:text="-"
android:textColor="@color/color_333333"
android:textSize="@dimen/dimen_font_16sp"
android:singleLine="true"
android:maxLines="1"
android:lines="1"
android:ellipsize="end"
android:layout_gravity="center_vertical"
/>
<ImageView
android:id="@+id/navi_address_arrow"
style="@style/WrapContent"
android:layout_marginLeft="@dimen/dimen_block_2"
android:layout_marginRight="@dimen/dimen_block_2"
android:src="@drawable/icon_right_black_arrow"
android:layout_gravity="center_vertical"
/>
<TextView
android:id="@+id/navi_end_address"
style="@style/WrapContent"
android:text="-"
android:textColor="@color/color_333333"
android:textSize="@dimen/dimen_font_16sp"
android:singleLine="true"
android:maxLines="1"
android:lines="1"
android:ellipsize="end"
android:layout_gravity="center_vertical"
/>
</LinearLayout>
<LinearLayout
style="@style/WrapContent.WidthMatchParent"
android:layout_marginTop="@dimen/dimen_block_5"
android:orientation="horizontal">
<TextView
android:id="@+id/navi_distance_label"
style="@style/WrapContent"
android:text="路\u3000程:"
android:textColor="@color/color_666666"
android:textSize="@dimen/dimen_font_16sp"
android:layout_gravity="center_vertical"
/>
<TextView
android:id="@+id/navi_distance"
style="@style/WrapContent"
android:text="-"
android:textColor="@color/color_333333"
android:textSize="@dimen/dimen_font_16sp"
android:singleLine="true"
android:maxLines="1"
android:lines="1"
android:ellipsize="end"
android:layout_gravity="center_vertical"
/>
</LinearLayout>
<LinearLayout
style="@style/WrapContent.WidthMatchParent"
android:layout_marginTop="@dimen/dimen_block_5"
android:orientation="horizontal">
<TextView
android:id="@+id/navi_time_label"
style="@style/WrapContent"
android:text="时\u3000间:"
android:textColor="@color/color_666666"
android:textSize="@dimen/dimen_font_16sp"
android:layout_gravity="center_vertical"
/>
<TextView
android:id="@+id/navi_time"
style="@style/WrapContent"
android:text="-"
android:textColor="@color/color_333333"
android:textSize="@dimen/dimen_font_16sp"
android:singleLine="true"
android:maxLines="1"
android:lines="1"
android:ellipsize="end"
android:layout_gravity="center_vertical"
/>
</LinearLayout>
<TextView <TextView
android:id="@+id/navi_start_tv" android:id="@+id/navi_start_tv"
......
...@@ -5,7 +5,9 @@ ...@@ -5,7 +5,9 @@
<color name="colorWhite">#FFFFFF</color> <color name="colorWhite">#FFFFFF</color>
<color name="colorWhiteTras">#E6FFFFFF</color> <color name="colorWhiteTras">#E6FFFFFF</color>
<color name="colorBlank">#000000</color> <color name="colorBlank">#000000</color>
<color name="colorTrans">#00000000</color>
<color name="colorBlankTras">#80000000</color> <color name="colorBlankTras">#80000000</color>
<color name="colorHalfTrans">#B2000000</color>
<color name="color_333333">#333333</color> <color name="color_333333">#333333</color>
<color name="color_666666">#666666</color> <color name="color_666666">#666666</color>
<color name="color_999999">#999999</color> <color name="color_999999">#999999</color>
...@@ -17,6 +19,7 @@ ...@@ -17,6 +19,7 @@
<color name="color_1A34BC">#1A34BC</color> <color name="color_1A34BC">#1A34BC</color>
<color name="color_F05B48">#F05B48</color> <color name="color_F05B48">#F05B48</color>
<color name="color_515151">#515151</color> <color name="color_515151">#515151</color>
<color name="color_737373">#737373</color>
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<color name="divide_line_color">#eaeaea</color><!-- 分割线色 --> <color name="purple_200">#FFBB86FC</color>
<color name="divide_view_color">#f0f0f0</color><!-- 分割块色 --> <color name="purple_500">#FF6200EE</color>
<color name="white">#ffffff</color><!--主题颜色--> <color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="divide_line_color">#eaeaea</color>
<color name="divide_view_color">#f0f0f0</color>
<color name="MultipleChoiceButtonChoiceText">#ffffff</color>
<color name="MultipleChoiceButtonUnchoiceText">#0079FE</color>
<color name="data_stores_gray">#80ffffff</color>
<color name="feedback_green">#26d589</color>
<color name="feedback_gray">#dfe1e3</color>
<color name="shallow_gray">#9e9e9e</color>
<color name="item_pressed">#E8E8E8</color>
<color name="black_06">#0f000000</color><!-- 黑色透明6%push色 --> <color name="black_06">#0f000000</color><!-- 黑色透明6%push色 -->
<color name="black">#000000</color>
<color name="red">#ffff0000</color> <color name="navingViewLinkUpInfoColor">#96989b</color>
<color name="blue">#008ef2</color>
<color name="gray">#B8B8B8</color> <!-- 灰色 --> <color name="mask_tmc_no">#ff0088cc</color><!--路径的填充-->
<color name="grey_text_color">#a3a3a3</color><!-- 灰色字 --> <color name="mask_tmc_1">#00be4c</color>
<color name="gps_accuracy_big">#5bd636</color><!-- GPS强色 --> <color name="mask_tmc_2">#ffae00</color>
<color name="gps_accuracy_small">#f93e3c</color><!-- GPS弱色 --> <color name="mask_tmc_3">#f45656</color>
<color name="sa_color">#008B87</color> <color name="mask_tmc_4">#ff101010</color>
<color name="bar_pass_color">#9aabc4</color> <color name="mask_out_tmc_1">#237042</color><!--路径的边填充-->
<color name="bar_mask_tmc_1">#45cc6a</color> <color name="mask_out_tmc_2">#c28000</color>
<color name="bar_mask_tmc_2">#ffae00</color> <color name="mask_out_tmc_3">#b23434</color>
<color name="bar_mask_tmc_3">#ff5453</color> <color name="mask_out_tmc_4">#741111</color>
</resources> </resources>
\ No newline at end of file
...@@ -25,7 +25,9 @@ ...@@ -25,7 +25,9 @@
<string name="string_navi_input_hint">请选择</string> <string name="string_navi_input_hint">请选择</string>
<string name="string_navi_finish">路线规划</string> <string name="string_navi_finish">路线规划</string>
<string name="string_navi_navi">导航</string> <string name="string_navi_navi">导航</string>
<string name="string_navi_navi_detail">详情</string>
<string name="string_navi_start_navi">开始导航</string> <string name="string_navi_start_navi">开始导航</string>
<string name="string_navi_quit_navi">退出导航</string>
<!--搜索--> <!--搜索-->
<string name="string_search_hint">请输入关键字</string> <string name="string_search_hint">请输入关键字</string>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment