Merge remote-tracking branch 'origin/feature/v1.0.0' into feature/v1.0.0

# Conflicts:
#	.idea/misc.xml
This commit is contained in:
zhangyuanzhen
2020-01-09 20:28:39 +08:00
27 changed files with 773 additions and 944 deletions

View File

@@ -39,6 +39,12 @@ dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation rootProject.ext.dependencies.androidxappcompat
implementation rootProject.ext.dependencies.androidxconstraintlayout
implementation rootProject.ext.dependencies.arouter
annotationProcessor rootProject.ext.dependencies.aroutercompiler
implementation rootProject.ext.dependencies.rxjava
implementation rootProject.ext.dependencies.rxandroid
if (Boolean.valueOf(RELEASE)) {
implementation rootProject.ext.dependencies.mogomap
@@ -55,10 +61,6 @@ dependencies {
implementation project(':modules:mogo-module-common')
implementation project(':modules:mogo-module-service')
}
implementation rootProject.ext.dependencies.androidxappcompat
implementation rootProject.ext.dependencies.androidxconstraintlayout
implementation rootProject.ext.dependencies.arouter
annotationProcessor rootProject.ext.dependencies.aroutercompiler
implementation 'com.shuyu:gsyVideoPlayer-armv7a:7.1.1'
implementation 'com.shuyu:gsyVideoPlayer-arm64:7.1.1'

View File

@@ -0,0 +1,13 @@
package com.mogo.module.tanlu.callback;
import com.mogo.module.tanlu.model.InformationAndLiveCarResult;
/**
* @author lixiaopeng
* @description 导航沿途搜索
* @since 2020-01-09
*/
public interface AlongTheWayCallback {
void onSuccess(InformationAndLiveCarResult data);
void onFail(String message, int code);
}

View File

@@ -0,0 +1,13 @@
package com.mogo.module.tanlu.callback;
import com.mogo.module.tanlu.model.PathLineResult;
/**
* @author lixiaopeng
* @description 通勤族回调
* @since 2020-01-09
*/
public interface RoadLineCallback {
void onSuccess(PathLineResult data);
void onFail(String message, int code);
}

View File

@@ -0,0 +1,13 @@
package com.mogo.module.tanlu.callback;
import com.mogo.module.tanlu.model.VoiceSearchResult;
/**
* @author lixiaopeng
* @description 声音控制搜索回调
* @since 2020-01-09
*/
public interface VoiceSearchCallback {
void onSuccess(VoiceSearchResult data);
void onFail(String message, int code);
}

View File

@@ -0,0 +1,13 @@
package com.mogo.module.tanlu.constant;
/**
* @author lixiaopeng
* @description
* @since 2020-01-09
*/
public class HttpConst {
public static final String HOST_DEV = "http://dzt-test.zhidaohulian.com";
public static final String HOST_TEST = "http://dzt-test.zhidaohulian.com";
public static final String HOST_PRODUCT = "https://dzt.zhidaohulian.com";
}

View File

@@ -9,5 +9,5 @@ package com.mogo.module.tanlu.constant;
public class TanluConstants {
public static final String TAG = "/tanlu/ui";
public static final String NAVI_INFO = "navi_info";
}

View File

@@ -4,6 +4,7 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.text.Html;
import android.text.TextUtils;
import android.view.MotionEvent;
import android.view.View;
import android.widget.RelativeLayout;
@@ -13,11 +14,24 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.alibaba.android.arouter.launcher.ARouter;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.route.BusRouteResult;
import com.amap.api.services.route.DrivePath;
import com.amap.api.services.route.DriveRouteResult;
import com.amap.api.services.route.RideRouteResult;
import com.amap.api.services.route.RouteSearch;
import com.amap.api.services.route.WalkRouteResult;
import com.mogo.commons.data.BaseData;
import com.mogo.commons.debug.DebugConfig;
import com.mogo.commons.mvp.IView;
import com.mogo.commons.mvp.MvpFragment;
import com.mogo.commons.mvp.Presenter;
import com.mogo.commons.network.ParamsProvider;
import com.mogo.commons.network.SubscribeImpl;
import com.mogo.map.MogoLatLng;
import com.mogo.map.impl.amap.overlay.DrivingRouteOverlay;
import com.mogo.map.listener.IMogoMapListener;
import com.mogo.map.location.IMogoLocationClient;
import com.mogo.map.location.IMogoLocationListener;
import com.mogo.map.location.MogoLocation;
import com.mogo.map.marker.IMogoMarker;
@@ -30,19 +44,40 @@ import com.mogo.map.search.poisearch.IMogoPoiSearchListener;
import com.mogo.map.search.poisearch.MogoPoiResult;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.module.service.entity.MarkerExploreWay;
import com.mogo.module.service.entity.MarkerResponse;
import com.mogo.module.service.network.RefreshApiService;
import com.mogo.module.service.network.RefreshBody;
import com.mogo.module.service.network.RefreshModel;
import com.mogo.module.tanlu.callback.AlongTheWayCallback;
import com.mogo.module.tanlu.callback.RoadLineCallback;
import com.mogo.module.tanlu.callback.VoiceSearchCallback;
import com.mogo.module.tanlu.constant.HttpConst;
import com.mogo.module.tanlu.model.Information;
import com.mogo.module.tanlu.model.InformationAndLiveCarResult;
import com.mogo.module.tanlu.model.PathLineResult;
import com.mogo.module.tanlu.model.TanluModelData;
import com.mogo.module.tanlu.model.VoiceSearchResult;
import com.mogo.module.tanlu.net.TanluApiService;
import com.mogo.module.tanlu.util.ActivityStatusUtil;
import com.mogo.module.tanlu.util.Utils;
import com.mogo.module.tanlu.voice.VoiceController;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.connection.IMogoOnMessageListener;
import com.mogo.service.connection.IMogoSocketManager;
import com.mogo.service.imageloader.IMogoImageLoaderListener;
import com.mogo.service.imageloader.IMogoImageloader;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.module.IMogoModuleLifecycle;
import com.mogo.module.tanlu.R;
import com.mogo.module.tanlu.model.event.MarkerInfo;
import com.mogo.module.tanlu.util.Utils;
import com.mogo.module.tanlu.video.FullMediaActivity;
import com.mogo.module.tanlu.video.SimpleCoverVideoPlayer;
import com.mogo.module.tanlu.view.AutoZoomInImageView;
import com.mogo.service.network.IMogoNetwork;
import com.mogo.utils.TipToast;
import com.mogo.utils.logger.Logger;
import com.mogo.utils.network.RequestOptions;
import com.mogo.utils.network.utils.GsonUtil;
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder;
import org.greenrobot.eventbus.EventBus;
@@ -50,8 +85,14 @@ import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import static com.mogo.commons.network.Utils.getSn;
import static com.mogo.module.tanlu.util.StringUitlKt.formatDate;
import static com.mogo.module.tanlu.util.Utils.handleDistance;
import static com.mogo.module.tanlu.video.VideoInitKt.initVideo;
@@ -77,6 +118,14 @@ public class TanluCardViewFragment extends MvpFragment<IView, Presenter<IView>>
private IMogoMarker mPoiMarker;
private IMogoMarkerManager mMarkerManager;
private IMogoMapService mMogoMapService;
private IMogoSocketManager mMogoSocketManager;
private IMogoLocationClient mLocationClient;
//声音控制文字
private String voiceGetInfoMationTts;
private String[] searchingVoiceStrings;
private String[] searchfaileVoiceStrings;
//media
private GSYVideoOptionBuilder gsyVideoOptionBuilder = new GSYVideoOptionBuilder();
private String mVideoUrl = "http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8";
@@ -94,6 +143,8 @@ public class TanluCardViewFragment extends MvpFragment<IView, Presenter<IView>>
private List<MarkerExploreWay> markerExploreWayList = new ArrayList<>();
private int currentPosition = 0; //卡片媒体当前位置
private Bitmap mMarkerIcon;
private TanluModelData mTanluModelData;
private List<MogoLatLng> passedByPoints;
@Override
@@ -145,6 +196,27 @@ public class TanluCardViewFragment extends MvpFragment<IView, Presenter<IView>>
super.onActivityCreated(savedInstanceState);
getViewLifecycleOwner().getLifecycle().addObserver(mPresenter);
EventBus.getDefault().register(this);
mTanluModelData = new TanluModelData(getContext());
handleRoadLineMessage();
}
/**
* 处理路线数据信息 TODO
*/
private void handleRoadLineMessage() {
mMogoSocketManager = (IMogoSocketManager) ARouter.getInstance().build(MogoServicePaths.PATH_SOCKET_MANAGER).navigation();
mMogoSocketManager.registerOnMessageListener(401001, new IMogoOnMessageListener<MarkerResponse>() {
@Override
public Class<MarkerResponse> target() {
return MarkerResponse.class;
}
@Override
public void onMsgReceived(MarkerResponse obj) {
Logger.e(TAG, "onMsgReceived obj= " + obj);
getRoadLineData();
}
});
}
/**
@@ -422,7 +494,7 @@ public class TanluCardViewFragment extends MvpFragment<IView, Presenter<IView>>
}
/**
* 接收到对应数据打点
* 接收到分享对应数据打点
*
* @param event
*/
@@ -456,6 +528,159 @@ public class TanluCardViewFragment extends MvpFragment<IView, Presenter<IView>>
});
}
/**
* 导航路线数据事件
*/
public void getNavigationLineData() {
Double lat = TanluServiceHandler.getLocationClient().getLastKnowLocation().getLatitude();
Double lon = TanluServiceHandler.getLocationClient().getLastKnowLocation().getLongitude();
mTanluModelData.getNavigationLineData(lon, lat, new AlongTheWayCallback() {
@Override
public void onSuccess(InformationAndLiveCarResult data) {
}
@Override
public void onFail(String message, int code) {
}
});
}
/**
* 通勤族 事件,监听消息自己请求路线数据
*/
public void getRoadLineData() {
mTanluModelData.getRoadLineData(new RoadLineCallback() {
@Override
public void onSuccess(PathLineResult o) {
//绘制线路线
if (o != null && o.getPointList() != null && o.getPointList().size() > 0) {
int intervalNum = Utils.getIntervalValue(o.getPointList().size());
Logger.d(TAG, "intervalNum = $intervalNum -- pointList.size = ${pointList.size}");
int listSize = o.getPointList().size();
//沿途最多15个点
for (int i = 0; i < listSize; i += intervalNum) {
passedByPoints.add(new MogoLatLng(o.getPointList().get(i).getLat(), (o.getPointList().get(i).getLon())));
}
Logger.d(TAG, "passedByPoints.size() ----> " + passedByPoints.size());
MogoLatLng startLatLng = new MogoLatLng(o.getPointList().get(0).getLat(), o.getPointList().get(0).getLon());
MogoLatLng endLatLng = new MogoLatLng(o.getPointList().get(listSize - 1).getLat(), o.getPointList().get(listSize - 1).getLon());
mMarkerManager.addRouteWay(getContext(), startLatLng, endLatLng, passedByPoints);
}
}
@Override
public void onFail(String message, int code) {
}
});
}
/**
* 声音控制道理数据
*/
public void getVoiceControlRoadData(String keywords) {
Double lat = TanluServiceHandler.getLocationClient().getLastKnowLocation().getLatitude();
Double lon = TanluServiceHandler.getLocationClient().getLastKnowLocation().getLongitude();
String cityCode = TanluServiceHandler.getLocationClient().getLastKnowLocation().getCityCode();
String adCode = TanluServiceHandler.getLocationClient().getLastKnowLocation().getAdCode();
mTanluModelData.getVoiceControlRoadData(keywords, cityCode, lon, lat, adCode, new VoiceSearchCallback() {
@Override
public void onSuccess(VoiceSearchResult o) {
String discription = o.getDescription();
Logger.d(TAG, "discription = " + discription);
if (o.getInformations() != null && o.getInformations().size() > 0) {
speakSuccessVoice(o.getInformations(), discription == null ? "" : discription);
} else {
if (!TextUtils.isEmpty(discription)) {
// VoiceController.speakVoice(discription);
} else {
// VoiceController.speakVoice("未找到其他车主分享的路况信息");
}
}
}
@Override
public void onFail(String message, int code) {
}
});
}
private void speakSuccessVoice(List<Information> informations, String trafficStatus) {
// switch (informations.size()) {
// case 0:
// speakFailVoice();
// break;
//
// case 1:
// trackVoiceSearch(1);
// VoiceController.speakVoice(
// String.format(
// voiceGetInfoMationTts,
// "1"
// ) + trafficStatus
// );
//
// case 2:
// trackVoiceSearch(1);
// VoiceController.speakVoice(
// String.format(
// voiceGetInfoMationTts,
// "2"
// ) + trafficStatus
// );
//
//
// case 3:
// trackVoiceSearch(1);
// VoiceController.speakVoice(
// String.format(
// voiceGetInfoMationTts,
// "3"
// ) + trafficStatus
// );
//
// default:
// trackVoiceSearch(1);
// VoiceController.speakVoice(
// String.format(
// voiceGetInfoMationTts,
// "多"
// ) + trafficStatus);
// }
}
private void initStrings() {
voiceGetInfoMationTts =
getContext().getResources().getString(R.string.voice_get_informations_tts);
searchingVoiceStrings =
getContext().getResources().getStringArray(R.array.searching_voice_string_array);
searchfaileVoiceStrings =
getContext().getResources().getStringArray(R.array.search_fail_voice_array);
}
private void speakFailVoice(String string) {
// VoiceController.speakVoice(string);
trackVoiceSearch(2);
}
//上报语音搜索
private void trackVoiceSearch(int type) {
// trackNormalEvent(
// CarNet_Voice_Search, mutableMapOf("type" to type, "searchtext" to keywords, "inputlon" to inputLon,
// "inputlat" to inputLat, "datalon" to dataLon, "datalat" to dataLat),
// BaseApplication.getAppContext()
// )
}
}

View File

@@ -40,6 +40,7 @@ public class TanluCardViewProvider implements IMogoModuleProvider {
@Override
public void init( Context context ) {
TanluServiceHandler.init( context );
Logger.d(TAG, "init ----------> ");
}
@Override

View File

@@ -1,268 +0,0 @@
package com.mogo.module.tanlu.map;
import android.text.Html;
import android.text.Spanned;
import android.widget.EditText;
import com.amap.api.maps.model.LatLng;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.route.BusPath;
import com.amap.api.services.route.BusStep;
import com.amap.api.services.route.RouteBusLineItem;
import com.amap.api.services.route.RouteRailwayItem;
import com.mogo.module.tanlu.R;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class AMapUtil {
/**
* 判断edittext是否null
*/
public static String checkEditText(EditText editText) {
if (editText != null && editText.getText() != null
&& !(editText.getText().toString().trim().equals(""))) {
return editText.getText().toString().trim();
} else {
return "";
}
}
public static Spanned stringToSpan(String src) {
return src == null ? null : Html.fromHtml(src.replace("\n", "<br />"));
}
public static String colorFont(String src, String color) {
StringBuffer strBuf = new StringBuffer();
strBuf.append("<font color=").append(color).append(">").append(src)
.append("</font>");
return strBuf.toString();
}
public static String makeHtmlNewLine() {
return "<br />";
}
public static String makeHtmlSpace(int number) {
final String space = "&nbsp;";
StringBuilder result = new StringBuilder();
for (int i = 0; i < number; i++) {
result.append(space);
}
return result.toString();
}
public static String getFriendlyLength(int lenMeter) {
if (lenMeter > 10000) // 10 km
{
int dis = lenMeter / 1000;
return dis + ChString.Kilometer;
}
if (lenMeter > 1000) {
float dis = (float) lenMeter / 1000;
DecimalFormat fnum = new DecimalFormat("##0.0");
String dstr = fnum.format(dis);
return dstr + ChString.Kilometer;
}
if (lenMeter > 100) {
int dis = lenMeter / 50 * 50;
return dis + ChString.Meter;
}
int dis = lenMeter / 10 * 10;
if (dis == 0) {
dis = 10;
}
return dis + ChString.Meter;
}
public static boolean IsEmptyOrNullString(String s) {
return (s == null) || (s.trim().length() == 0);
}
/**
* 把LatLng对象转化为LatLonPoint对象
*/
public static LatLonPoint convertToLatLonPoint(LatLng latlon) {
return new LatLonPoint(latlon.latitude, latlon.longitude);
}
/**
* 把LatLonPoint对象转化为LatLon对象
*/
public static LatLng convertToLatLng(LatLonPoint latLonPoint) {
return new LatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude());
}
/**
* 把集合体的LatLonPoint转化为集合体的LatLng
*/
public static ArrayList<LatLng> convertArrList(List<LatLonPoint> shapes) {
ArrayList<LatLng> lineShapes = new ArrayList<LatLng>();
for (LatLonPoint point : shapes) {
LatLng latLngTemp = AMapUtil.convertToLatLng(point);
lineShapes.add(latLngTemp);
}
return lineShapes;
}
/**
* long类型时间格式化
*/
public static String convertToTime(long time) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(time);
return df.format(date);
}
public static final String HtmlBlack = "#000000";
public static final String HtmlGray = "#808080";
public static String getFriendlyTime(int second) {
if (second > 3600) {
int hour = second / 3600;
int miniate = (second % 3600) / 60;
return hour + "小时" + miniate + "分钟";
}
if (second >= 60) {
int miniate = second / 60;
return miniate + "分钟";
}
return second + "";
}
//路径规划方向指示和图片对应
public static int getDriveActionID(String actionName) {
if (actionName == null || actionName.equals("")) {
return R.drawable.dir3;
}
if ("左转".equals(actionName)) {
return R.drawable.dir2;
}
if ("右转".equals(actionName)) {
return R.drawable.dir1;
}
if ("向左前方行驶".equals(actionName) || "靠左".equals(actionName)) {
return R.drawable.dir6;
}
if ("向右前方行驶".equals(actionName) || "靠右".equals(actionName)) {
return R.drawable.dir5;
}
if ("向左后方行驶".equals(actionName) || "左转调头".equals(actionName)) {
return R.drawable.dir7;
}
if ("向右后方行驶".equals(actionName)) {
return R.drawable.dir8;
}
if ("直行".equals(actionName)) {
return R.drawable.dir3;
}
if ("减速行驶".equals(actionName)) {
return R.drawable.dir4;
}
return R.drawable.dir3;
}
public static int getWalkActionID(String actionName) {
if (actionName == null || actionName.equals("")) {
return R.drawable.dir13;
}
if ("左转".equals(actionName)) {
return R.drawable.dir2;
}
if ("右转".equals(actionName)) {
return R.drawable.dir1;
}
if ("向左前方".equals(actionName) || "靠左".equals(actionName) || actionName.contains("向左前方")) {
return R.drawable.dir6;
}
if ("向右前方".equals(actionName) || "靠右".equals(actionName) || actionName.contains("向右前方")) {
return R.drawable.dir5;
}
if ("向左后方".equals(actionName) || actionName.contains("向左后方")) {
return R.drawable.dir7;
}
if ("向右后方".equals(actionName) || actionName.contains("向右后方")) {
return R.drawable.dir8;
}
if ("直行".equals(actionName)) {
return R.drawable.dir3;
}
if ("通过人行横道".equals(actionName)) {
return R.drawable.dir9;
}
if ("通过过街天桥".equals(actionName)) {
return R.drawable.dir11;
}
if ("通过地下通道".equals(actionName)) {
return R.drawable.dir10;
}
return R.drawable.dir13;
}
public static String getBusPathTitle(BusPath busPath) {
if (busPath == null) {
return String.valueOf("");
}
List<BusStep> busSetps = busPath.getSteps();
if (busSetps == null) {
return String.valueOf("");
}
StringBuffer sb = new StringBuffer();
for (BusStep busStep : busSetps) {
StringBuffer title = new StringBuffer();
if (busStep.getBusLines().size() > 0) {
for (RouteBusLineItem busline : busStep.getBusLines()) {
if (busline == null) {
continue;
}
String buslineName = getSimpleBusLineName(busline.getBusLineName());
title.append(buslineName);
title.append(" / ");
}
// RouteBusLineItem busline = busStep.getBusLines().get(0);
sb.append(title.substring(0, title.length() - 3));
sb.append(" > ");
}
if (busStep.getRailway() != null) {
RouteRailwayItem railway = busStep.getRailway();
sb.append(railway.getTrip() + "(" + railway.getDeparturestop().getName()
+ " - " + railway.getArrivalstop().getName() + ")");
sb.append(" > ");
}
}
return sb.substring(0, sb.length() - 3);
}
public static String getBusPathDes(BusPath busPath) {
if (busPath == null) {
return String.valueOf("");
}
long second = busPath.getDuration();
String time = getFriendlyTime((int) second);
float subDistance = busPath.getDistance();
String subDis = getFriendlyLength((int) subDistance);
float walkDistance = busPath.getWalkDistance();
String walkDis = getFriendlyLength((int) walkDistance);
return String.valueOf(time + " | " + subDis + " | 步行" + walkDis);
}
public static String getSimpleBusLineName(String busLineName) {
if (busLineName == null) {
return String.valueOf("");
}
return busLineName.replaceAll("\\(.*?\\)", "");
}
}

View File

@@ -1,26 +0,0 @@
package com.mogo.module.tanlu.map;
public class ChString {
public static final String Kilometer = "\u516c\u91cc";// "公里";
public static final String Meter = "\u7c73";// "米";
public static final String ByFoot = "\u6b65\u884c";// "步行";
public static final String To = "\u53bb\u5f80";// "去往";
public static final String Station = "\u8f66\u7ad9";// "车站";
public static final String TargetPlace = "\u76ee\u7684\u5730";// "目的地";
public static final String StartPlace = "\u51fa\u53d1\u5730";// "出发地";
public static final String About = "\u5927\u7ea6";// "大约";
public static final String Direction = "\u65b9\u5411";// "方向";
public static final String GetOn = "\u4e0a\u8f66";// "上车";
public static final String GetOff = "\u4e0b\u8f66";// "下车";
public static final String Zhan = "\u7ad9";// "站";
public static final String cross = "\u4ea4\u53c9\u8def\u53e3"; // 交叉路口
public static final String type = "\u7c7b\u522b"; // 类别
public static final String address = "\u5730\u5740"; // 地址
public static final String PrevStep = "\u4e0a\u4e00\u6b65";
public static final String NextStep = "\u4e0b\u4e00\u6b65";
public static final String Gong = "\u516c\u4ea4";
public static final String ByBus = "\u4e58\u8f66";
public static final String Arrive = "\u5230\u8FBE";// 到达
}

View File

@@ -1,384 +0,0 @@
package com.mogo.module.tanlu.map;
import android.content.Context;
import android.graphics.Color;
import com.amap.api.maps.AMap;
import com.amap.api.maps.model.BitmapDescriptor;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.LatLngBounds;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.PolylineOptions;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.route.DrivePath;
import com.amap.api.services.route.DriveStep;
import com.amap.api.services.route.TMC;
import com.mogo.module.tanlu.R;
import java.util.ArrayList;
import java.util.List;
/**
* 导航路线图层类
*/
public class DrivingRouteOverlay extends RouteOverlay {
private DrivePath drivePath;
private List<LatLonPoint> throughPointList;
private List<Marker> throughPointMarkerList = new ArrayList<Marker>();
private boolean throughPointMarkerVisible = true;
private List<TMC> tmcs;
private PolylineOptions mPolylineOptions;
private PolylineOptions mPolylineOptionscolor;
private Context mContext;
private boolean isColorfulline = true;
private float mWidth = 4;
private List<LatLng> mLatLngsOfPath;
public void setIsColorfulline(boolean iscolorfulline) {
this.isColorfulline = iscolorfulline;
}
/**
* 根据给定的参数,构造一个导航路线图层类对象。
*
* @param amap 地图对象。
* @param path 导航路线规划方案。
* @param context 当前的activity对象。
*/
public DrivingRouteOverlay(Context context, AMap amap, DrivePath path,
LatLonPoint start, LatLonPoint end, List<LatLonPoint> throughPointList) {
super(context);
mContext = context;
mAMap = amap;
this.drivePath = path;
startPoint = AMapUtil.convertToLatLng(start);
endPoint = AMapUtil.convertToLatLng(end);
this.throughPointList = throughPointList;
initBitmapDescriptor();
}
public float getRouteWidth() {
return mWidth;
}
/**
* 设置路线宽度
*
* @param mWidth 路线宽度取值范围大于0
*/
public void setRouteWidth(float mWidth) {
this.mWidth = mWidth;
}
/**
* 添加驾车路线添加到地图上显示。
*/
public void addToMap() {
initPolylineOptions();
try {
if (mAMap == null) {
return;
}
if (mWidth == 0 || drivePath == null) {
return;
}
mLatLngsOfPath = new ArrayList<LatLng>();
tmcs = new ArrayList<TMC>();
List<DriveStep> drivePaths = drivePath.getSteps();
mPolylineOptions.add(startPoint);
for (int i = 0; i < drivePaths.size(); i++) {
DriveStep step = drivePaths.get(i);
List<LatLonPoint> latlonPoints = step.getPolyline();
List<TMC> tmclist = step.getTMCs();
tmcs.addAll(tmclist);
addDrivingStationMarkers(step, convertToLatLng(latlonPoints.get(0)));
for (LatLonPoint latlonpoint : latlonPoints) {
mPolylineOptions.add(convertToLatLng(latlonpoint));
mLatLngsOfPath.add(convertToLatLng(latlonpoint));
}
}
mPolylineOptions.add(endPoint);
if (startMarker != null) {
startMarker.remove();
startMarker = null;
}
if (endMarker != null) {
endMarker.remove();
endMarker = null;
}
// addStartAndEndMarker();
// addThroughPointMarker();
if (isColorfulline && tmcs.size() > 0) {
colorWayUpdate(tmcs);
showcolorPolyline();
} else {
showPolyline();
}
} catch (Throwable e) {
e.printStackTrace();
}
}
/**
* 初始化线段属性
*/
private void initPolylineOptions() {
mPolylineOptions = null;
mPolylineOptions = new PolylineOptions();
mPolylineOptions.color(getDriveColor()).width(getRouteWidth());
}
private void showPolyline() {
addPolyLine(mPolylineOptions);
}
private void showcolorPolyline() {
addPolyLine(mPolylineOptionscolor);
}
/**
* 根据不同的路段拥堵情况展示不同的颜色
*
* @param tmcSection
*/
private void colorWayUpdate(List<TMC> tmcSection) {
if (mAMap == null) {
return;
}
if (tmcSection == null || tmcSection.size() <= 0) {
return;
}
TMC segmentTrafficStatus;
mPolylineOptionscolor = null;
mPolylineOptionscolor = new PolylineOptions();
mPolylineOptionscolor.width(getRouteWidth());
List<Integer> colorList = new ArrayList<Integer>();
List<BitmapDescriptor> bitmapDescriptors = new ArrayList<BitmapDescriptor>();
List<LatLng> points = new ArrayList<>();
List<Integer> texIndexList = new ArrayList<Integer>();
// mPolylineOptionscolor.add(startPoint);
// mPolylineOptionscolor.add(AMapUtil.convertToLatLng(tmcSection.get(0).getPolyline().get(0)));
points.add(startPoint);
points.add(AMapUtil.convertToLatLng(tmcSection.get(0).getPolyline().get(0)));
colorList.add(getDriveColor());
bitmapDescriptors.add(defaultRoute);
BitmapDescriptor bitmapDescriptor = null;
int textIndex = 0;
texIndexList.add(textIndex);
texIndexList.add(++textIndex);
for (int i = 0; i < tmcSection.size(); i++) {
segmentTrafficStatus = tmcSection.get(i);
int color = getcolor(segmentTrafficStatus.getStatus());
bitmapDescriptor = getTrafficBitmapDescriptor(segmentTrafficStatus.getStatus());
List<LatLonPoint> mployline = segmentTrafficStatus.getPolyline();
for (int j = 0; j < mployline.size(); j++) {
// mPolylineOptionscolor.add(AMapUtil.convertToLatLng(mployline.get(j)));
points.add(AMapUtil.convertToLatLng(mployline.get(j)));
colorList.add(color);
texIndexList.add(++textIndex);
bitmapDescriptors.add(bitmapDescriptor);
}
}
points.add(endPoint);
colorList.add(getDriveColor());
bitmapDescriptors.add(defaultRoute);
texIndexList.add(++textIndex);
mPolylineOptionscolor.addAll(points);
mPolylineOptionscolor.colorValues(colorList);
// mPolylineOptionscolor.setCustomTextureIndex(texIndexList);
// mPolylineOptionscolor.setCustomTextureList(bitmapDescriptors);
}
private BitmapDescriptor defaultRoute = null;
private BitmapDescriptor unknownTraffic = null;
private BitmapDescriptor smoothTraffic = null;
private BitmapDescriptor slowTraffic = null;
private BitmapDescriptor jamTraffic = null;
private BitmapDescriptor veryJamTraffic = null;
private void initBitmapDescriptor() {
defaultRoute = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_6_arrow);
smoothTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_4_arrow);
unknownTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_0_arrow);
slowTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_3_arrow);
jamTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_2_arrow);
veryJamTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_9_arrow);
}
private BitmapDescriptor getTrafficBitmapDescriptor(String status) {
if (status.equals("畅通")) {
return smoothTraffic;
} else if (status.equals("缓行")) {
return slowTraffic;
} else if (status.equals("拥堵")) {
return jamTraffic;
} else if (status.equals("严重拥堵")) {
return veryJamTraffic;
} else {
return defaultRoute;
}
}
private int getcolor(String status) {
if (status.equals("畅通")) {
return Color.GREEN;
} else if (status.equals("缓行")) {
return Color.YELLOW;
} else if (status.equals("拥堵")) {
return Color.RED;
} else if (status.equals("严重拥堵")) {
return Color.parseColor("#990033");
} else {
return Color.GREEN;
}
}
public LatLng convertToLatLng(LatLonPoint point) {
return new LatLng(point.getLatitude(), point.getLongitude());
}
/**
* @param driveStep
* @param latLng
*/
private void addDrivingStationMarkers(DriveStep driveStep, LatLng latLng) {
addStationMarker(new MarkerOptions()
.position(latLng)
.title("\u65B9\u5411:" + driveStep.getAction()
+ "\n\u9053\u8DEF:" + driveStep.getRoad())
.snippet(driveStep.getInstruction()).visible(nodeIconVisible)
.anchor(0.5f, 0.5f).icon(getDriveBitmapDescriptor()));
}
@Override
protected LatLngBounds getLatLngBounds() {
LatLngBounds.Builder b = LatLngBounds.builder();
b.include(new LatLng(startPoint.latitude, startPoint.longitude));
b.include(new LatLng(endPoint.latitude, endPoint.longitude));
if (this.throughPointList != null && this.throughPointList.size() > 0) {
for (int i = 0; i < this.throughPointList.size(); i++) {
b.include(new LatLng(
this.throughPointList.get(i).getLatitude(),
this.throughPointList.get(i).getLongitude()));
}
}
return b.build();
}
public void setThroughPointIconVisibility(boolean visible) {
try {
throughPointMarkerVisible = visible;
if (this.throughPointMarkerList != null
&& this.throughPointMarkerList.size() > 0) {
for (int i = 0; i < this.throughPointMarkerList.size(); i++) {
this.throughPointMarkerList.get(i).setVisible(visible);
}
}
} catch (Throwable e) {
e.printStackTrace();
}
}
private void addThroughPointMarker() {
if (this.throughPointList != null && this.throughPointList.size() > 0) {
LatLonPoint latLonPoint = null;
for (int i = 0; i < this.throughPointList.size(); i++) {
latLonPoint = this.throughPointList.get(i);
if (latLonPoint != null) {
throughPointMarkerList.add(mAMap
.addMarker((new MarkerOptions())
.position(
new LatLng(latLonPoint
.getLatitude(), latLonPoint
.getLongitude()))
.visible(throughPointMarkerVisible)
.icon(getThroughPointBitDes())
.title("\u9014\u7ECF\u70B9")));
}
}
}
}
private BitmapDescriptor getThroughPointBitDes() {
return BitmapDescriptorFactory.fromResource(R.drawable.amap_through);
}
/**
* 获取两点间距离
*
* @param start
* @param end
* @return
*/
public static int calculateDistance(LatLng start, LatLng end) {
double x1 = start.longitude;
double y1 = start.latitude;
double x2 = end.longitude;
double y2 = end.latitude;
return calculateDistance(x1, y1, x2, y2);
}
public static int calculateDistance(double x1, double y1, double x2, double y2) {
final double NF_pi = 0.01745329251994329; // 弧度 PI/180
x1 *= NF_pi;
y1 *= NF_pi;
x2 *= NF_pi;
y2 *= NF_pi;
double sinx1 = Math.sin(x1);
double siny1 = Math.sin(y1);
double cosx1 = Math.cos(x1);
double cosy1 = Math.cos(y1);
double sinx2 = Math.sin(x2);
double siny2 = Math.sin(y2);
double cosx2 = Math.cos(x2);
double cosy2 = Math.cos(y2);
double[] v1 = new double[3];
v1[0] = cosy1 * cosx1 - cosy2 * cosx2;
v1[1] = cosy1 * sinx1 - cosy2 * sinx2;
v1[2] = siny1 - siny2;
double dist = Math.sqrt(v1[0] * v1[0] + v1[1] * v1[1] + v1[2] * v1[2]);
return (int) (Math.asin(dist / 2) * 12742001.5798544);
}
//获取指定两点之间固定距离点
public static LatLng getPointForDis(LatLng sPt, LatLng ePt, double dis) {
double lSegLength = calculateDistance(sPt, ePt);
double preResult = dis / lSegLength;
return new LatLng((ePt.latitude - sPt.latitude) * preResult + sPt.latitude, (ePt.longitude - sPt.longitude) * preResult + sPt.longitude);
}
/**
* 去掉DriveLineOverlay上的线段和标记。
*/
@Override
public void removeFromMap() {
try {
super.removeFromMap();
if (this.throughPointMarkerList != null
&& this.throughPointMarkerList.size() > 0) {
for (int i = 0; i < this.throughPointMarkerList.size(); i++) {
this.throughPointMarkerList.get(i).remove();
}
this.throughPointMarkerList.clear();
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}

View File

@@ -1,236 +0,0 @@
package com.mogo.module.tanlu.map;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.model.BitmapDescriptor;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.LatLngBounds;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.Polyline;
import com.amap.api.maps.model.PolylineOptions;
import com.mogo.module.tanlu.R;
import java.util.ArrayList;
import java.util.List;
public class RouteOverlay {
protected List<Marker> stationMarkers = new ArrayList<Marker>();
protected List<Polyline> allPolyLines = new ArrayList<Polyline>();
protected Marker startMarker;
protected Marker endMarker;
protected LatLng startPoint;
protected LatLng endPoint;
protected AMap mAMap;
private Context mContext;
private Bitmap startBit, endBit, busBit, walkBit, driveBit;
protected boolean nodeIconVisible = true;
public RouteOverlay(Context context) {
mContext = context;
}
/**
* 去掉BusRouteOverlay上所有的Marker。
*
* @since V2.1.0
*/
public void removeFromMap() {
if (startMarker != null) {
startMarker.remove();
}
if (endMarker != null) {
endMarker.remove();
}
for (Marker marker : stationMarkers) {
marker.remove();
}
for (Polyline line : allPolyLines) {
line.remove();
}
destroyBit();
}
private void destroyBit() {
if (startBit != null) {
startBit.recycle();
startBit = null;
}
if (endBit != null) {
endBit.recycle();
endBit = null;
}
if (busBit != null) {
busBit.recycle();
busBit = null;
}
if (walkBit != null) {
walkBit.recycle();
walkBit = null;
}
if (driveBit != null) {
driveBit.recycle();
driveBit = null;
}
}
/**
* 给起点Marker设置图标并返回更换图标的图片。如不用默认图片需要重写此方法。
*
* @return 更换的Marker图片。
* @since V2.1.0
*/
protected BitmapDescriptor getStartBitmapDescriptor() {
return BitmapDescriptorFactory.fromResource(R.drawable.amap_start);
}
/**
* 给终点Marker设置图标并返回更换图标的图片。如不用默认图片需要重写此方法。
*
* @return 更换的Marker图片。
* @since V2.1.0
*/
protected BitmapDescriptor getEndBitmapDescriptor() {
return BitmapDescriptorFactory.fromResource(R.drawable.amap_end);
}
/**
* 给公交Marker设置图标并返回更换图标的图片。如不用默认图片需要重写此方法。
*
* @return 更换的Marker图片。
* @since V2.1.0
*/
protected BitmapDescriptor getBusBitmapDescriptor() {
return BitmapDescriptorFactory.fromResource(R.drawable.amap_bus);
}
/**
* 给步行Marker设置图标并返回更换图标的图片。如不用默认图片需要重写此方法。
*
* @return 更换的Marker图片。
* @since V2.1.0
*/
protected BitmapDescriptor getWalkBitmapDescriptor() {
return BitmapDescriptorFactory.fromResource(R.drawable.amap_man);
}
protected BitmapDescriptor getDriveBitmapDescriptor() {
return BitmapDescriptorFactory.fromResource(R.drawable.amap_car);
}
protected void addStartAndEndMarker() {
startMarker = mAMap.addMarker((new MarkerOptions())
.position(startPoint).icon(getStartBitmapDescriptor())
.title("\u8D77\u70B9"));
// startMarker.showInfoWindow();
endMarker = mAMap.addMarker((new MarkerOptions()).position(endPoint)
.icon(getEndBitmapDescriptor()).title("\u7EC8\u70B9"));
// mAMap.moveCamera(CameraUpdateFactory.newLatLngZoom(startPoint,
// getShowRouteZoom()));
}
/**
* 移动镜头到当前的视角。
*
* @since V2.1.0
*/
public void zoomToSpan() {
if (startPoint != null) {
if (mAMap == null)
return;
try {
LatLngBounds bounds = getLatLngBounds();
mAMap.animateCamera(CameraUpdateFactory
.newLatLngBounds(bounds, 50));
} catch (Throwable e) {
e.printStackTrace();
}
}
}
protected LatLngBounds getLatLngBounds() {
LatLngBounds.Builder b = LatLngBounds.builder();
b.include(new LatLng(startPoint.latitude, startPoint.longitude));
b.include(new LatLng(endPoint.latitude, endPoint.longitude));
for (Polyline polyline : allPolyLines) {
for (LatLng point : polyline.getPoints()) {
b.include(point);
}
}
return b.build();
}
/**
* 路段节点图标控制显示接口。
*
* @param visible true为显示节点图标false为不显示。
* @since V2.3.1
*/
public void setNodeIconVisibility(boolean visible) {
try {
nodeIconVisible = visible;
if (this.stationMarkers != null && this.stationMarkers.size() > 0) {
for (int i = 0; i < this.stationMarkers.size(); i++) {
this.stationMarkers.get(i).setVisible(visible);
}
}
} catch (Throwable e) {
e.printStackTrace();
}
}
protected void addStationMarker(MarkerOptions options) {
if (options == null) {
return;
}
Marker marker = mAMap.addMarker(options);
if (marker != null) {
stationMarkers.add(marker);
}
}
protected void addPolyLine(PolylineOptions options) {
if (options == null) {
return;
}
Polyline polyline = mAMap.addPolyline(options);
if (polyline != null) {
allPolyLines.add(polyline);
}
}
protected float getRouteWidth() {
return 18f;
}
protected int getWalkColor() {
return Color.parseColor("#6db74d");
}
/**
* 自定义路线颜色。
* return 自定义路线颜色。
*
* @since V2.2.1
*/
protected int getBusColor() {
return Color.parseColor("#537edc");
}
protected int getDriveColor() {
return Color.parseColor("#537edc");
}
// protected int getShowRouteZoom() {
// return 15;
// }
}

View File

@@ -0,0 +1,16 @@
package com.mogo.module.tanlu.model;
/**
* @author lixiaopeng
* @description
* @since 2020-01-09
*/
public class End {
public Double lat;
public Double lon;
public End(Double lat, Double lon) {
this.lat = lat;
this.lon = lon;
}
}

View File

@@ -0,0 +1,38 @@
package com.mogo.module.tanlu.model;
import com.mogo.commons.data.BaseData;
/**
* @author lixiaopeng
* @description
* @since 2020-01-09
*/
public class InformationAndLiveCarResult extends BaseData {
private Result onTheWayData;
private Result infoMationResult;
private Sns snResult;
public Result getOnTheWayData() {
return onTheWayData;
}
public void setOnTheWayData(Result onTheWayData) {
this.onTheWayData = onTheWayData;
}
public Result getInfoMationResult() {
return infoMationResult;
}
public void setInfoMationResult(Result infoMationResult) {
this.infoMationResult = infoMationResult;
}
public Sns getSnResult() {
return snResult;
}
public void setSnResult(Sns snResult) {
this.snResult = snResult;
}
}

View File

@@ -1,18 +0,0 @@
package com.mogo.module.tanlu.model
/**
* @author congtaowang
* @since 2019-11-20
*
* 根据范围请求情报+在线车机结果
*/
data class InformationAndLiveCarResult(
var onTheWayData: Result,
var infoMationResult: Result,
var snResult: Sns
) {
fun getInformation(): Result = if (onTheWayData == null
|| onTheWayData.informations == null
|| onTheWayData.informations.isEmpty()
) infoMationResult else onTheWayData
}

View File

@@ -0,0 +1,21 @@
package com.mogo.module.tanlu.model
class LocationCarsWithRadius {
var coordinates: List<Double>
var radius: Int
var type: String
var keyWord: String? = null
constructor(coordinates: List<Double>, radius: Int, type: String, keyWord: String) {
this.coordinates = coordinates
this.radius = radius
this.type = type
this.keyWord = keyWord
}
constructor(coordinates: List<Double>, radius: Int, type: String) {
this.coordinates = coordinates
this.radius = radius
this.type = type
}
}

View File

@@ -0,0 +1,17 @@
package com.mogo.module.tanlu.model;
/**
* @author lixiaopeng
* @description
* @since 2020-01-09
*/
public class NaviLatLng {
public Start start;
public End end;
NaviLatLng(Start start, End end) {
this.start = start;
this.end = end;
}
}

View File

@@ -0,0 +1,55 @@
package com.mogo.module.tanlu.model;
import java.io.Serializable;
/**
* @author lixiaopeng
* @description
* @since 2020-01-09
*/
public class NaviLatLngInfo implements Serializable {
public String FromPoiLatitude = "";
public String FromPoiLongitude = "";
public String ToPoiLatitude = "";
public String ToPoiLongitude= "";
// public Start fromStart() {
// return Start(Double.parseDouble(FromPoiLatitude), Double.parseDouble(FromPoiLongitude));
// }
//
// public End toEnd() {
// return End(ToPoiLatitude.toDouble(), ToPoiLongitude.toDouble());
// }
public String getFromPoiLatitude() {
return FromPoiLatitude;
}
public void setFromPoiLatitude(String fromPoiLatitude) {
FromPoiLatitude = fromPoiLatitude;
}
public String getFromPoiLongitude() {
return FromPoiLongitude;
}
public void setFromPoiLongitude(String fromPoiLongitude) {
FromPoiLongitude = fromPoiLongitude;
}
public String getToPoiLatitude() {
return ToPoiLatitude;
}
public void setToPoiLatitude(String toPoiLatitude) {
ToPoiLatitude = toPoiLatitude;
}
public String getToPoiLongitude() {
return ToPoiLongitude;
}
public void setToPoiLongitude(String toPoiLongitude) {
ToPoiLongitude = toPoiLongitude;
}
}

View File

@@ -0,0 +1,19 @@
package com.mogo.module.tanlu.model
import java.io.Serializable
fun NaviLatLngInfo.fromStart(): Start {
return Start(FromPoiLatitude.toDouble(), FromPoiLongitude.toDouble())
}
fun NaviLatLngInfo.toEnd(): End {
return End(ToPoiLatitude.toDouble(), ToPoiLongitude.toDouble())
}
class NaviLatLngInfo1 : Serializable {
var FromPoiLatitude: String = ""
var FromPoiLongitude: String = ""
var ToPoiLatitude: String = ""
var ToPoiLongitude: String = ""
}

View File

@@ -0,0 +1,10 @@
package com.mogo.module.tanlu.model
data class SearchOnlineInfo(
val address: String,
val cityId: String,
val size: Int,
// val radius: Int,
val center: Center,
val adcode: String
)

View File

@@ -0,0 +1,16 @@
package com.mogo.module.tanlu.model;
/**
* @author lixiaopeng
* @description
* @since 2020-01-09
*/
public class Start {
public Double lat;
public Double lon;
public Start(Double lat, Double lon) {
this.lat = lat;
this.lon = lon;
}
}

View File

@@ -0,0 +1,175 @@
package com.mogo.module.tanlu.model;
import android.content.Context;
import android.util.Log;
import com.alibaba.android.arouter.launcher.ARouter;
import com.google.gson.Gson;
import com.mogo.commons.debug.DebugConfig;
import com.mogo.commons.network.ParamsProvider;
import com.mogo.commons.network.SubscribeImpl;
import com.mogo.module.tanlu.callback.AlongTheWayCallback;
import com.mogo.module.tanlu.callback.RoadLineCallback;
import com.mogo.module.tanlu.callback.VoiceSearchCallback;
import com.mogo.module.tanlu.constant.HttpConst;
import com.mogo.module.tanlu.constant.TanluConstants;
import com.mogo.module.tanlu.net.TanluApiService;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.network.IMogoNetwork;
import com.mogo.utils.logger.Logger;
import com.mogo.utils.network.RequestOptions;
import com.mogo.utils.storage.SharedPrefsMgr;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import static com.mogo.commons.network.Utils.getSn;
/**
* @author lixiaopeng
* @description 探路接口数据处理
* @since 2020-01-09
*/
public class TanluModelData {
private final Context mContext;
private TanluApiService mTanluApiService;
private static final String TAG = "TanluModelData";
public TanluModelData(Context context) {
this.mContext = context;
IMogoNetwork network = (IMogoNetwork) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICES_NETWORK).navigation(context);
mTanluApiService = network.create(TanluApiService.class, DebugConfig.getNetMode() == 3 ? HttpConst.HOST_PRODUCT : HttpConst.HOST_TEST);
}
/**
* 声音控制道理数据
*/
public void getVoiceControlRoadData(String keywords, String cityId, Double lon, Double lat,
String adCode, final VoiceSearchCallback callback) {
Gson gson = new Gson();
SearchOnlineInfo searchOnlineInfo = new SearchOnlineInfo(keywords, cityId, 50, new Center(lat, lon), adCode);
String searchInformationStr = gson.toJson(searchOnlineInfo);
List<Double> list = new ArrayList<>();
list.add(lon);
list.add(lat);
LocationCarsWithRadius locCarsWithRadius = new LocationCarsWithRadius(list, 20000, "circle");
String locCarsWithRadiusStr = gson.toJson(locCarsWithRadius);
final Map<String, Object> params = new ParamsProvider.Builder(mContext)
.append("sn", getSn())
.append("data", searchInformationStr)
.append("getSnData", locCarsWithRadiusStr)
.build();
mTanluApiService.searchOnLineInformation(params)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SubscribeImpl<VoiceSearchResult>(RequestOptions.create(mContext)) {
@Override
public void onSuccess(VoiceSearchResult o) {
super.onSuccess(o);
callback.onSuccess(o);
Logger.d(TAG, "getVoiceControlRoadData onSuccess ------>");
}
@Override
public void onError(String message, int code) {
super.onError(message, code);
callback.onFail(message, code);
Logger.e(TAG, "getVoiceControlRoadData onError message= " + message + ">>code =" + code);
}
});
}
/**
* 通勤族 事件,监听消息自己请求路线数据
*/
public void getRoadLineData(final RoadLineCallback callback) {
if (mTanluApiService != null) {
final Map<String, Object> params = new ParamsProvider.Builder(mContext)
.append("sn", getSn())
.build();
mTanluApiService.getRoadLineInfo(params)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SubscribeImpl<PathLineResult>(RequestOptions.create(mContext)) {
@Override
public void onSuccess(PathLineResult o) {
super.onSuccess(o);
callback.onSuccess(o);
Logger.d(TAG, "getRoadLineData onSuccess ------>");
}
@Override
public void onError(String message, int code) {
super.onError(message, code);
callback.onFail(message, code);
Logger.e(TAG, "getRoadLineData onError message= " + message + ">>code =" + code);
}
});
}
}
/**
* 导航路线数据事件
*/
public void getNavigationLineData(Double lon, Double lat, final AlongTheWayCallback callback) {
Gson gson = new Gson();
// NaviLatLng coordinates = new NaviLatLng(getNaviInfo(lon, lat).fromStart(), getNaviInfo(lon, lat).toEnd());
List<Double> list = new ArrayList<>();
list.add(lon);
list.add(lat);
LocationCarsWithRadius locCarsWithRadius = new LocationCarsWithRadius(list, 20000, "circle");
String locCarsWithRadiusStr = gson.toJson(locCarsWithRadius);
final Map<String, Object> params = new ParamsProvider.Builder(mContext)
// .append("onTheWayData", gson.toJson(coordinates))
.append("getSnData", locCarsWithRadiusStr)
.build();
mTanluApiService.requestInformationAlongTheWay(getSn(), params)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SubscribeImpl<InformationAndLiveCarResult>(RequestOptions.create(mContext)) {
@Override
public void onSuccess(InformationAndLiveCarResult data) {
super.onSuccess(data);
callback.onSuccess(data);
Logger.d(TAG, "getNavigationLineData onSuccess ------>");
}
@Override
public void onError(String message, int code) {
super.onError(message, code);
callback.onFail(message, code);
Logger.e(TAG, "getNavigationLineData onError message= " + message + ">>code =" + code);
}
});
}
//获取Location如果没有location数据为空则使用首次或者上次定位点,并且更新SP,需要抽取公共方法
public NaviLatLngInfo getNaviInfo(Double lon, Double lat) {
String naviInfo = SharedPrefsMgr.getInstance(mContext).getString(TanluConstants.NAVI_INFO);
Log.d(TAG, " getNaviInfo naviInfo =" + naviInfo);
NaviLatLngInfo naviLatLngInfo = new Gson().fromJson(naviInfo, NaviLatLngInfo.class);
Log.d(TAG, "getLocNaviInfo lat = $lat -----> lon = $lon");
if (lon == 0.0 || lat == 0.0) {
return naviLatLngInfo;
} else {
naviLatLngInfo.setFromPoiLatitude(lat + "");
naviLatLngInfo.setFromPoiLongitude(lon + "");
SharedPrefsMgr.getInstance(mContext).putString(TanluConstants.NAVI_INFO, new Gson().toJson(naviLatLngInfo));
return naviLatLngInfo;
}
}
}

View File

@@ -22,26 +22,24 @@ public interface TanluApiService {
/**
* 探路沿途数据
*
* @return
*/
@FormUrlEncoded
@POST("deva/car/path/no/getOnTheWayDataAndSn/v1")
Observable<InformationAndLiveCarResult> requestInformationAlongTheWay(@Query("sn") String sn, @FieldMap Map<String, String> parameters);
Observable<InformationAndLiveCarResult> requestInformationAlongTheWay(@Query("sn") String sn, @FieldMap Map<String, Object> parameters);
/**
* 获取上班族路线的坐标集
*/
@FormUrlEncoded
@POST("yycp-travel-condition/travelDetail/info/no/commuter/v1")
Observable<PathLineResult> getRoadLineInfo(@FieldMap Map<String, String> infoBody);
Observable<PathLineResult> getRoadLineInfo(@FieldMap Map<String, Object> infoBody);
/**
* 基于地理信息词缀的空间情报检索
*/
@FormUrlEncoded
@POST("deva/car/search/no/searchInforationByAddress/v1")
Observable<VoiceSearchResult> searchOnLineInformation(@FieldMap Map<String, String> infoBody);
Observable<VoiceSearchResult> searchOnLineInformation(@FieldMap Map<String, Object> infoBody);
}

View File

@@ -0,0 +1,46 @@
package com.mogo.module.tanlu.util;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.text.TextUtils;
import java.util.List;
import static android.content.Context.ACTIVITY_SERVICE;
/**
* @author lixiaopeng
* @description
* @since 2019-09-26
*/
public class ActivityStatusUtil {
/**
* 判断某个activity是否在前台显示
*/
public static boolean isForeground(Context activity) {
return isForeground(activity, "com.zhidao.roadcondition.main_module.MainActivity");
}
/**
* 判断某个界面是否在前台,返回true为显示,否则不是
*/
public static boolean isForeground(Context context, String className) {
if (context == null || TextUtils.isEmpty(className)) {
return false;
}
ActivityManager am = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(1);
if (list != null && list.size() > 0) {
ComponentName cpn = list.get(0).topActivity;
if (className.equals(cpn.getClassName())) {
return true;
} else {
}
}
return false;
}
}

View File

@@ -1,6 +1,7 @@
package com.mogo.module.tanlu.util
import android.text.format.DateFormat
import com.google.gson.Gson
import java.text.DecimalFormat
const val format = "yy/MM/dd kk:mm:ss"
@@ -29,3 +30,7 @@ fun handleDistances(distance: Int): String {
}
}

View File

@@ -20,4 +20,12 @@ public class Utils {
}
}
//保留整数,四舍五入
public static int getIntervalValue(int listSize){
// var floatSize = listSize.toFloat();
int transformSize = listSize / 15;
DecimalFormat df = new DecimalFormat("0");
return Integer.parseInt((df.format(transformSize)));
}
}

View File

@@ -0,0 +1,57 @@
package com.mogo.module.tanlu.voice
import com.zhidao.auto.platform.voice.VoiceClient
/**
* @description 声音控制类
*
* @author lixiaopeng
* @since 2019-11-01
*/
object VoiceController {
private lateinit var voiceClient: VoiceClient
// fun initVoice() {
// voiceClient = VoiceClient.getInstance(BaseApplication.getAppContext())
// }
/**
* 设置语音命令回调接口
* @param callBack
*/
fun setCallBack(callBack: VoiceClient.VoiceCmdCallBack) {
voiceClient.setCallBack(callBack)
}
/**
* @param speakText 语音播报内容
*/
fun speakVoice(speakText: String) {
voiceClient.speakDefault(speakText)
}
/**
* 注册免唤醒命令
* @param customType 命令
* @param customWakeupCmd 命令对应的唤醒词集合
*/
fun registerCustomWakeupCmd(customType: String, customWakeupCmd: Array<String>) {
voiceClient.registerCustomWakeupCmd(customType, customWakeupCmd)
}
/**
* 取消免唤醒命令
* @param customType 命令
*/
fun unRegisterCustomWakeupCmd(customType: String) {
voiceClient.unRegisterCustomWakeupCmd(customType)
}
/**
* 释放资源(界面销毁的时候调用)
*/
fun release() {
voiceClient.release()
}
}