From dbc070a222fbbeb557bd66b8d070d1e92fb67709 Mon Sep 17 00:00:00 2001 From: wujifei Date: Wed, 20 Jan 2021 17:01:54 +0800 Subject: [PATCH 01/28] =?UTF-8?q?=E6=B7=BB=E5=8A=A0HttpLoggingInterceptor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foudations/mogo-commons/build.gradle | 2 + .../cloud/commons/network/OkHttpFactory.kt | 6 +- .../interceptor/RequestLogInterceptor.kt | 58 ------------------- .../interceptor/ResponseLogInterceptor.kt | 53 ----------------- 4 files changed, 4 insertions(+), 115 deletions(-) delete mode 100644 foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/interceptor/RequestLogInterceptor.kt delete mode 100644 foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/interceptor/ResponseLogInterceptor.kt diff --git a/foudations/mogo-commons/build.gradle b/foudations/mogo-commons/build.gradle index 27c082a..28e905a 100644 --- a/foudations/mogo-commons/build.gradle +++ b/foudations/mogo-commons/build.gradle @@ -37,5 +37,7 @@ dependencies { api rootProject.ext.dependencies.retrofitadapter api rootProject.ext.dependencies.retrofitconvertergson api rootProject.ext.dependencies.retrofitconverterscalars + implementation project(path: ':foudations:mogo-httpdns') + implementation rootProject.ext.dependencies.okhttpinterceptor } \ No newline at end of file diff --git a/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/OkHttpFactory.kt b/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/OkHttpFactory.kt index 2e69bc1..0e177f9 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/OkHttpFactory.kt +++ b/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/OkHttpFactory.kt @@ -4,11 +4,10 @@ import com.mogo.cloud.commons.network.NetConstants.Companion.CONNECT_TIMEOUT import com.mogo.cloud.commons.network.NetConstants.Companion.READ_TIMEOUT import com.mogo.cloud.commons.network.NetConstants.Companion.WRITE_TIMEOUT import com.mogo.cloud.commons.network.interceptor.HeaderNetworkInterceptor -import com.mogo.cloud.commons.network.interceptor.RequestLogInterceptor -import com.mogo.cloud.commons.network.interceptor.ResponseLogInterceptor import com.mogo.cloud.commons.utils.lookup import okhttp3.Dns import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor import java.net.InetAddress import java.util.concurrent.TimeUnit @@ -23,8 +22,7 @@ class OkHttpFactory private constructor() { companion object { val okHttpClient: OkHttpClient by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { OkHttpClient.Builder() - .addInterceptor(RequestLogInterceptor()) - .addInterceptor(ResponseLogInterceptor()) + .addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)) .addNetworkInterceptor(HeaderNetworkInterceptor()) .connectTimeout(CONNECT_TIMEOUT, TimeUnit.MILLISECONDS) .readTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS) diff --git a/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/interceptor/RequestLogInterceptor.kt b/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/interceptor/RequestLogInterceptor.kt deleted file mode 100644 index 2eda046..0000000 --- a/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/interceptor/RequestLogInterceptor.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.mogo.cloud.commons.network.interceptor - -import android.util.Log -import okhttp3.Interceptor -import okhttp3.Protocol -import okhttp3.Response -import okio.Buffer -import java.io.IOException -import java.nio.charset.Charset - -/** - * created by wujifei on 2021/1/20 10:48 - * describe: - */ -class RequestLogInterceptor : Interceptor { - private val TAG = "RequestLogInterceptor" - override fun intercept(chain: Interceptor.Chain): Response { - val request = chain.request() - val requestBody = request.body() - val hasRequestBody = requestBody != null - - var protocol = Protocol.HTTP_1_1.toString() - if (chain.connection() != null && chain.connection()!!.protocol() != null) { - protocol = chain.connection()!!.protocol().toString() - } - - val logMsg = StringBuilder() - logMsg.append("--> ") - logMsg.append(protocol).append(", ") - logMsg.append(request.method()).append(", ") - logMsg.append("Request Headers: ").append(request.headers()).append("\r\n") - logMsg.append(request.url()).append("\r\n") - if (hasRequestBody) { - logMsg.append("Content-Type: ").append(requestBody!!.contentType()).append(", ") - logMsg.append("\r\nContent-Length: ").append(requestBody!!.contentLength()) - try { - var body: String? = null - val UTF8 = Charset.forName("UTF-8") - val buffer = Buffer() - requestBody!!.writeTo(buffer) - var charset = UTF8 - val contentType = requestBody!!.contentType() - if (contentType != null) { - charset = contentType.charset(UTF8) - } - if (charset != null) { - body = buffer.readString(charset) - } - logMsg.append("\r\nContent-body: ").append(body) - } catch (e: IOException) { - e.printStackTrace() - } - } - logMsg.append("\r\n<-- end http request") - Log.d(TAG, logMsg.toString()) - return chain.proceed(request) - } -} \ No newline at end of file diff --git a/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/interceptor/ResponseLogInterceptor.kt b/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/interceptor/ResponseLogInterceptor.kt deleted file mode 100644 index 216bf23..0000000 --- a/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/interceptor/ResponseLogInterceptor.kt +++ /dev/null @@ -1,53 +0,0 @@ -package com.mogo.cloud.commons.network.interceptor - -import android.util.Log -import okhttp3.Interceptor -import okhttp3.MediaType -import okhttp3.Response -import okhttp3.ResponseBody -import java.util.concurrent.TimeUnit - -/** - * created by wujifei on 2021/1/20 10:50 - * describe: - */ -class ResponseLogInterceptor : Interceptor { - private val TAG = "ResponseLogInterceptor" - override fun intercept(chain: Interceptor.Chain): Response { - val startTime = System.nanoTime() - val response = chain.proceed(chain.request()) - val endTime = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime) - - val responseBody = response.body() - var responseContent: String? = null - var bodySize: String? = null - var contentType: MediaType? = null - var consumedResponse = false - - val logMsg = StringBuilder() - - if (responseBody != null) { - val contentLength = responseBody.contentLength() - bodySize = if (contentLength != -1L) "$contentLength-byte" else "unknown-length" - contentType = responseBody.contentType() - responseContent = responseBody.string() - consumedResponse = true - } - - logMsg.append("--> ") - logMsg.append(response.code()).append(" ") - logMsg.append(response.message()).append(" ") - logMsg.append(response.protocol()).append(" ") - logMsg.append(response.request().url()).append("\r\n") - logMsg.append("Response Content: ").append(responseContent).append("\r\n") - logMsg.append("Content-Type: ").append(contentType).append(", ") - logMsg.append("Content-Length: ").append(bodySize).append(", ") - logMsg.append(" (").append(endTime).append("ms)") - logMsg.append(" <-- end http response") - - Log.d(TAG, logMsg.toString()) - - - return if (consumedResponse) response.newBuilder().body(ResponseBody.create(contentType, responseContent)).build() else response - } -} \ No newline at end of file From 5196d4f9263f02c7d61d6138deb666e2aeaffd39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 20 Jan 2021 19:53:16 +0800 Subject: [PATCH 02/28] =?UTF-8?q?=E8=B0=83=E6=95=B4passport=E8=B0=83?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloud/passport/MoGoAiCloudClient.java | 83 +++++++++++-------- 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java index cfa493e..07f2f5e 100644 --- a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java +++ b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java @@ -7,7 +7,6 @@ import androidx.annotation.Keep; import com.mogo.cloud.httpdns.MogoHttpDnsClient; import com.mogo.cloud.httpdns.MogoHttpDnsConfig; -import com.mogo.cloud.httpdns.bean.HttpDnsSimpleLocation; import com.zhidao.tcloginsdk.LoginManager; import com.zhidao.tcloginsdk.model.ThirdLoginParam; import com.zhidao.tcloginsdk.model.TokenData; @@ -68,45 +67,57 @@ public class MoGoAiCloudClient { if (mAiCloudClientConfig != null) { ThirdLoginParam thirdLoginParam = ThirdLoginParam.of( mAiCloudClientConfig.getThirdPartyDeviceId(), - mAiCloudClientConfig.getThirdPartyAppKey(), - mAiCloudClientConfig.getThirdPartySignSecret() + mAiCloudClientConfig.getThirdPartyAppKey() ); + LoginCallback loginCallback = new LoginCallback() { + @Override + public void onSuccess(TokenData.TokenResult result) { + Log.i(TAG, "═════════════════════════════════════"); + Log.i(TAG, "║ MoGo鉴权成功 "); + Log.i(TAG, "║ SN:" + result.sn); + Log.i(TAG, "║ Token:" + result.token); + Log.i(TAG, "═════════════════════════════════════"); + if (tokenCallback != null) { + tokenCallback.onTokenGot(result.token, result.sn); + } + + // 变量赋值 + if (mAiCloudClientConfig != null) { + mAiCloudClientConfig.sn = result.sn; + mAiCloudClientConfig.token = result.token; + } + + // 初始化HttpDNS + mHttpDnsConfig = + new MogoHttpDnsConfig() + .setContext(mContext) + .setSn(mAiCloudClientConfig.sn) + .setEnv(mAiCloudClientConfig.getNetMode()) + .setShowDebugLog(mAiCloudClientConfig.isShowDebugLog()) + .setCurrentLocation(mAiCloudClientConfig.getIHttpDnsCurrentLocation()) + .setLoopCheckDelay(mAiCloudClientConfig.getLoopCheckDelay()); + MogoHttpDnsClient.INSTANCE.init(mHttpDnsConfig); + } + + @Override + public void onFailure(int code, String msg) { + Log.e(TAG, "═════════════════════════════════════"); + Log.e(TAG, "║ MoGo鉴权失败 "); + Log.e(TAG, "║ ErrorCode:" + code); + Log.e(TAG, "║ ErrorMessage:" + msg); + Log.e(TAG, "═════════════════════════════════════"); + if (tokenCallback != null) { + tokenCallback.onError(code, msg); + } + } + }; + + Log.w(TAG, "loginCallback:" + loginCallback); + LoginManager.getInstance(mContext).login( mAiCloudClientConfig.isThirdLogin(), - thirdLoginParam, - new LoginCallback() { - @Override - public void onSuccess(TokenData.TokenResult result) { - if (tokenCallback != null) { - tokenCallback.onTokenGot(result.token, result.sn); - } - - // 变量赋值 - if (mAiCloudClientConfig != null) { - mAiCloudClientConfig.sn = result.sn; - mAiCloudClientConfig.token = result.token; - } - - // 初始化HttpDNS - mHttpDnsConfig = - new MogoHttpDnsConfig() - .setContext(mContext) - .setSn(mAiCloudClientConfig.sn) - .setEnv(mAiCloudClientConfig.getNetMode()) - .setShowDebugLog(mAiCloudClientConfig.isShowDebugLog()) - .setCurrentLocation(mAiCloudClientConfig.getIHttpDnsCurrentLocation()) - .setLoopCheckDelay(mAiCloudClientConfig.getLoopCheckDelay()); - MogoHttpDnsClient.INSTANCE.init(mHttpDnsConfig); - } - - @Override - public void onFailure(int code, String msg) { - if (tokenCallback != null) { - tokenCallback.onError(code, msg); - } - } - }); + thirdLoginParam, loginCallback); } else { Log.e(TAG, "SDK MoGoAiCloudClientConfig 为 null,请检查!"); } From 31d4a24445e94af6b1649de129a1883714558622 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Wed, 20 Jan 2021 20:38:45 +0800 Subject: [PATCH 03/28] opt --- modules/mogo-tanlu/build.gradle | 3 + .../java/com/mogo/tanlu/TestActivity.java | 67 ++++ .../java/com/mogo/tanlu/api/ILoadUpload.java | 13 + .../java/com/mogo/tanlu/api/ITanluUpload.java | 13 + .../com/mogo/tanlu/bean/InformationBody.java | 248 ++++++++++++ .../com/mogo/tanlu/bean/MarkerExploreWay.java | 238 +++++++++++ .../mogo/tanlu/bean/MarkerExploreWayItem.java | 65 +++ .../com/mogo/tanlu/bean/MarkerUserInfo.java | 210 ++++++++++ .../com/mogo/tanlu/bean/RoadInfoRequest.java | 58 +++ .../java/com/mogo/tanlu/bean/RoadInfos.java | 6 +- .../tanlu/bean/TanluMarkerExploreWay.java | 12 - .../mogo/tanlu/bean/location/Location.java | 29 ++ .../tanlu/bean/location/MarkerLocation.java | 64 +++ .../tanlu/bean/location/MogoLocation.java | 379 ++++++++++++++++++ .../com/mogo/tanlu/impl/LoadUploadImpl.java | 22 + .../com/mogo/tanlu/impl/TanluUploadImpl.java | 27 ++ 16 files changed, 1439 insertions(+), 15 deletions(-) create mode 100644 modules/mogo-tanlu/src/main/java/com/mogo/tanlu/TestActivity.java create mode 100644 modules/mogo-tanlu/src/main/java/com/mogo/tanlu/api/ILoadUpload.java create mode 100644 modules/mogo-tanlu/src/main/java/com/mogo/tanlu/api/ITanluUpload.java create mode 100644 modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/InformationBody.java create mode 100644 modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/MarkerExploreWay.java create mode 100644 modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/MarkerExploreWayItem.java create mode 100644 modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/MarkerUserInfo.java create mode 100644 modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/RoadInfoRequest.java delete mode 100644 modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/TanluMarkerExploreWay.java create mode 100644 modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/location/Location.java create mode 100644 modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/location/MarkerLocation.java create mode 100644 modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/location/MogoLocation.java create mode 100644 modules/mogo-tanlu/src/main/java/com/mogo/tanlu/impl/LoadUploadImpl.java create mode 100644 modules/mogo-tanlu/src/main/java/com/mogo/tanlu/impl/TanluUploadImpl.java diff --git a/modules/mogo-tanlu/build.gradle b/modules/mogo-tanlu/build.gradle index 64d7d15..24aa1b5 100644 --- a/modules/mogo-tanlu/build.gradle +++ b/modules/mogo-tanlu/build.gradle @@ -40,4 +40,7 @@ dependencies { implementation rootProject.ext.dependencies.retrofitconvertergson implementation rootProject.ext.dependencies.gson implementation rootProject.ext.dependencies.rxjava + + implementation 'com.elegant.spi:api:1.0.9' + annotationProcessor 'com.elegant.spi:compiler:1.0.3' } \ No newline at end of file diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/TestActivity.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/TestActivity.java new file mode 100644 index 0000000..8b8d006 --- /dev/null +++ b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/TestActivity.java @@ -0,0 +1,67 @@ +package com.mogo.tanlu; + +import android.os.Bundle; +import android.os.PersistableBundle; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + +import com.elegant.spi.AbstractDelegateManager; +import com.mogo.tanlu.api.ILoadUpload; +import com.mogo.tanlu.api.ITanluUpload; +import com.mogo.tanlu.bean.InformationBody; +import com.mogo.tanlu.bean.UploadResult; + +/** + * @author lixiaopeng + * @description 纯测试,没有注册类 + * @since 2021/1/20 + */ +public class TestActivity extends AppCompatActivity { + +// private TanluDelegateManager testDelegateManager; + private UploadDelegateManager uploadDelegateManager; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) { + super.onCreate(savedInstanceState, persistentState); + +// testDelegateManager = new TanluDelegateManager(); + uploadDelegateManager = new UploadDelegateManager(); + } + + + //如何回调回去成功和失败, + //如何更加简化使用api + //是不是意味着使用方也需要添加spi + public class UploadDelegateManager extends AbstractDelegateManager { + public UploadDelegateManager() { + //加载实现了spi接口的自定义服务 + loadDelegates(TestActivity.this, ILoadUpload.class, new DelegateListener() { + @Override + public void onDelegate(String unit, ILoadUpload p) { + //加载成功,调用各个服务自定义show方法 TODO + p.loadUpload("F803EB2046PZD00228", new InformationBody()); + } + }); + } + } + + + //实现AbstractDelegateManager +// public class TanluDelegateManager extends AbstractDelegateManager { +// public TanluDelegateManager() { +// //加载实现了spi接口的自定义服务 +// loadDelegates(TestActivity.this, ITanluUpload.class, new DelegateListener() { +// @Override +// public void onDelegate(String unit, ITanluUpload p) { +// //加载成功,调用各个服务自定义show方法 +// p.onFailure(0); +// p.onSuccess(new UploadResult()); +// } +// }); +// } +// } + + +} diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/api/ILoadUpload.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/api/ILoadUpload.java new file mode 100644 index 0000000..1d40744 --- /dev/null +++ b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/api/ILoadUpload.java @@ -0,0 +1,13 @@ +package com.mogo.tanlu.api; + + +import com.mogo.tanlu.bean.InformationBody; + +/** + * @author lixiaopeng + * @description + * @since 2021/1/20 + */ +public interface ILoadUpload { + void loadUpload(String sn, InformationBody informationBody); +} diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/api/ITanluUpload.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/api/ITanluUpload.java new file mode 100644 index 0000000..9ced506 --- /dev/null +++ b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/api/ITanluUpload.java @@ -0,0 +1,13 @@ +package com.mogo.tanlu.api; + +import com.mogo.tanlu.bean.UploadResult; + +/** + * @author lixiaopeng + * @description + * @since 2021/1/20 + */ +public interface ITanluUpload { + void onSuccess(UploadResult result); + void onFailure(int code); +} diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/InformationBody.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/InformationBody.java new file mode 100644 index 0000000..5d9b028 --- /dev/null +++ b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/InformationBody.java @@ -0,0 +1,248 @@ +package com.mogo.tanlu.bean; + +import java.io.Serializable; + +/** + * @author lixiaopeng + * @description + * @since 2021/1/20 + */ +public class InformationBody implements Serializable { + private String data; + private String addr; + private String areaCode; + private String areaName; + private String cityCode; + private String cityName; + private long generateTime; + private double lat; + private double lon; + private String provinceName; + private String sn; + private String street; + private int type; + private int uid; + private int infoType; + private int infoTimeout; + private String trafficInfoType; // 上报情报类型 + private boolean isShare; // 是否分享给附近车机 + private float direction; + private String poiType; //类型分类 + private long mainInfoId; //事件id + private float speed; //车速 + private String fromType; //上报触发来源 + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getAddr() { + return addr; + } + + public void setAddr(String addr) { + this.addr = addr; + } + + public String getAreaCode() { + return areaCode; + } + + public void setAreaCode(String areaCode) { + this.areaCode = areaCode; + } + + public String getAreaName() { + return areaName; + } + + public void setAreaName(String areaName) { + this.areaName = areaName; + } + + public String getCityCode() { + return cityCode; + } + + public void setCityCode(String cityCode) { + this.cityCode = cityCode; + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public long getGenerateTime() { + return generateTime; + } + + public void setGenerateTime(long generateTime) { + this.generateTime = generateTime; + } + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLon() { + return lon; + } + + public void setLon(double lon) { + this.lon = lon; + } + + public String getProvinceName() { + return provinceName; + } + + public void setProvinceName(String provinceName) { + this.provinceName = provinceName; + } + + public String getSn() { + return sn; + } + + public void setSn(String sn) { + this.sn = sn; + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } + + public int getInfoType() { + return infoType; + } + + public void setInfoType(int infoType) { + this.infoType = infoType; + } + + public int getInfoTimeout() { + return infoTimeout; + } + + public void setInfoTimeout(int infoTimeout) { + this.infoTimeout = infoTimeout; + } + + public String getTrafficInfoType() { + return trafficInfoType; + } + + public void setTrafficInfoType(String trafficInfoType) { + this.trafficInfoType = trafficInfoType; + } + + public boolean isShare() { + return isShare; + } + + public void setShare(boolean share) { + isShare = share; + } + + public float getDirection() { + return direction; + } + + public void setDirection(float direction) { + this.direction = direction; + } + + public String getPoiType() { + return poiType; + } + + public void setPoiType(String poiType) { + this.poiType = poiType; + } + + public long getMainInfoId() { + return mainInfoId; + } + + public void setMainInfoId(long mainInfoId) { + this.mainInfoId = mainInfoId; + } + + public float getSpeed() { + return speed; + } + + public void setSpeed(float speed) { + this.speed = speed; + } + + public String getFromType() { + return fromType; + } + + public void setFromType(String fromType) { + this.fromType = fromType; + } + + + @Override + public String toString() { + return "InformationBody{" + + "data='" + data + '\'' + + ", addr='" + addr + '\'' + + ", areaCode='" + areaCode + '\'' + + ", areaName='" + areaName + '\'' + + ", cityCode='" + cityCode + '\'' + + ", cityName='" + cityName + '\'' + + ", generateTime=" + generateTime + + ", lat=" + lat + + ", lon=" + lon + + ", provinceName='" + provinceName + '\'' + + ", sn='" + sn + '\'' + + ", street='" + street + '\'' + + ", type=" + type + + ", uid=" + uid + + ", infoType=" + infoType + + ", infoTimeout=" + infoTimeout + + ", trafficInfoType='" + trafficInfoType + '\'' + + ", isShare=" + isShare + + ", direction=" + direction + + ", poiType='" + poiType + '\'' + + ", mainInfoId=" + mainInfoId + + ", speed=" + speed + + ", fromType='" + fromType + '\'' + + '}'; + } +} diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/MarkerExploreWay.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/MarkerExploreWay.java new file mode 100644 index 0000000..2e93938 --- /dev/null +++ b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/MarkerExploreWay.java @@ -0,0 +1,238 @@ +package com.mogo.tanlu.bean; + +import android.text.TextUtils; + +import com.mogo.tanlu.bean.location.MarkerLocation; + +import java.io.Serializable; +import java.util.List; +import java.util.Objects; + +/** + * @author lixiaopeng + * @description + * @since 2021/1/20 + */ +public class MarkerExploreWay implements Serializable { + private String infoId; + private String type;//卡片类型, + + private String poiType; + private String sn; + private MarkerLocation location;//位置信息 + private int direction;//方位角度 + private boolean canLive;//是否可直播(1为可直播,0不可直播) + private int fileType;//是图片还是视频(1视频,0图片) + private String addr;//北京市朝阳区三里屯街道108号 + private long generateTime;//时间戳 + private String cityName;//:"城市名称", + private double distance;//距离 + private MarkerUserInfo userInfo;//用户信息 + private List items;//视频地址和图片地址 + //上报类型:1-用户上报,2-后台上报 3-三方上报 + private String uploadType; + + private boolean fabulous; + + // http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=42321443 + // 1 需要用户判断是否拥堵 进行UGC问答 + private int infoCheckNode; + + public String getAddr() { + if (TextUtils.isEmpty(addr)) { + return "未知道路"; + } + return addr; + } + + public void setAddr(String addr) { + this.addr = addr; + } + + public boolean getCanLive() { + return canLive; + } + + public void setCanLive(boolean canLive) { + this.canLive = canLive; + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public float getDirection() { + return direction; + } + + public void setDirection(int direction) { + this.direction = direction; + } + + public double getDistance() { + return distance; + } + + public void setDistance(double distance) { + this.distance = distance; + } + + public double getFileType() { + return fileType; + } + + public void setFileType(int fileType) { + this.fileType = fileType; + } + + public Long getGenerateTime() { + return generateTime; + } + + public void setGenerateTime(Long generateTime) { + this.generateTime = generateTime; + } + + public List getItems() { + return items; + } + + public void setItems(List items) { + this.items = items; + } + + public MarkerLocation getLocation() { + return location; + } + + public void setLocation(MarkerLocation location) { + this.location = location; + } + + public String getSn() { + return sn; + } + + public void setSn(String sn) { + this.sn = sn; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public MarkerUserInfo getUserInfo() { + return userInfo; + } + + public void setUserInfo(MarkerUserInfo userInfo) { + this.userInfo = userInfo; + } + + public String getInfoId() { + return infoId; + } + + public int getInfoIdInt() { + try { + return Integer.parseInt(infoId); + } catch (NumberFormatException e) { + e.printStackTrace(); + return -1; + } + } + + public void setInfoId(String infoId) { + this.infoId = infoId; + } + + public String getPoiType() { + if (TextUtils.isEmpty(poiType)) { + return "10007"; //拥堵 + } + return poiType; + } + + public void setPoiType(String poiType) { + this.poiType = poiType; + } + + public String getUploadType() { + return uploadType; + } + + public void setUploadType(String uploadType) { + this.uploadType = uploadType; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MarkerExploreWay that = (MarkerExploreWay) o; + return Objects.equals(infoId, that.infoId) && + Objects.equals(type, that.type) && + Objects.equals(poiType, that.poiType); + } + + @Override + public int hashCode() { + return Objects.hash(infoId, type, poiType); + } + + public boolean isCanLive() { + return canLive; + } + + public void setGenerateTime(long generateTime) { + this.generateTime = generateTime; + } + + public int getInfoCheckNode() { + return infoCheckNode; + } + + public void setInfoCheckNode(int infoCheckNode) { + this.infoCheckNode = infoCheckNode; + } + + public boolean isFabulous() { + return fabulous; + } + + public void setFabulous(boolean fabulous) { + this.fabulous = fabulous; + } + + @Override + public String toString() { + return "MarkerExploreWay{" + + "infoId='" + infoId + '\'' + + ", type='" + type + '\'' + + ", poiType='" + poiType + '\'' + + ", sn='" + sn + '\'' + + ", location=" + location + + ", direction=" + direction + + ", canLive=" + canLive + + ", fileType=" + fileType + + ", addr='" + addr + '\'' + + ", generateTime=" + generateTime + + ", cityName='" + cityName + '\'' + + ", distance=" + distance + + ", userInfo=" + userInfo + + ", items=" + items + + ", uploadType='" + uploadType + '\'' + + ", fabulous=" + fabulous + + ", infoCheckNode=" + infoCheckNode + + '}'; + } + +} diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/MarkerExploreWayItem.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/MarkerExploreWayItem.java new file mode 100644 index 0000000..510a3cf --- /dev/null +++ b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/MarkerExploreWayItem.java @@ -0,0 +1,65 @@ +package com.mogo.tanlu.bean; + +import android.text.TextUtils; + +import java.io.Serializable; + +/** + * @author lixiaopeng + * @description + * @since 2021/1/20 + */ +public class MarkerExploreWayItem implements Serializable { + private String thumbnail; + private String url; + private String content; + private double illegalCount; + + public String getThumbnail() { + if (TextUtils.isEmpty(thumbnail)) { + return ""; + } + return thumbnail; + } + + public void setThumbnail(String thumbnail) { + this.thumbnail = thumbnail; + } + + public String getUrl() { + if (TextUtils.isEmpty(url)) { + return ""; + } + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public double getIllegalCount() { + return illegalCount; + } + + public void setIllegalCount(double illegalCount) { + this.illegalCount = illegalCount; + } + + @Override + public String toString() { + return "MarkerExploreWayItem{" + + "thumbnail='" + thumbnail + '\'' + + ", url='" + url + '\'' + + ", content='" + content + '\'' + + ", illegalCount='" + illegalCount + '\'' + + '}'; + } +} diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/MarkerUserInfo.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/MarkerUserInfo.java new file mode 100644 index 0000000..60f1bb2 --- /dev/null +++ b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/MarkerUserInfo.java @@ -0,0 +1,210 @@ +package com.mogo.tanlu.bean; + +import android.text.TextUtils; + +import java.io.Serializable; +import java.util.Calendar; + +/** + * @author lixiaopeng + * @description + * @since 2021/1/20 + */ +public class MarkerUserInfo implements Serializable { + private String sn; + private long userId; + private String userName;//用户昵称 + private String userHead;//用户头像 + private String gender;//gender": "男|女|无(也可以0|1|2根据实际库存返回即可) + private Integer age;// 年龄段,可以为空,与车聊聊一致 + + // TODO V2X临时字段,接口出好后进行修改 + private String lastActiveweekAvgscore;//末次活跃周驾驶行为平均得分 + private String safeLabel;//车辆安全标签 + private int safeLabelType;//1老司机 2安全驾驶 3危险驾驶 + + public void setAge(Integer age) { + this.age = age; + } + + public int getAgeNumber() { + if (age != null) { + return age; + } + return -1; + } + + public String getAge() { + try { + if (getAgeNumber() >= 0) { + + Calendar cal = Calendar.getInstance(); + int year = cal.get(Calendar.YEAR); + + //2020-30=1990 + double ageDiffer = year - getAgeNumber(); + String ageStr = "" + ageDiffer; + char[] ageChars = ageStr.toCharArray(); + + //1990 + char ageChar = ageChars[2]; + + String ageString = "未设置"; + + switch (ageChar) { + case '0': + ageString = "00后"; + break; + case '1': + ageString = "10后"; + break; + case '2': + ageString = "20后"; + break; + case '3': + ageString = "30后"; + break; + case '4': + ageString = "40后"; + break; + case '5': + ageString = "50后"; + break; + case '6': + ageString = "60后"; + break; + case '7': + ageString = "70后"; + break; + case '8': + ageString = "80后"; + break; + case '9': + ageString = "90后"; + break; + } + + return ageString; + } else { + return ""; + } + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + + public int getGenderValue() { + if (!TextUtils.isEmpty(gender)) { + if ("男".equals(gender)) { + return 0; + } + return 1; + } else { + return 0; + } + } + + public String getGender() { + if (TextUtils.isEmpty(gender)) { + return "未设置"; + } + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public void setGender(int gender) { + if (gender == 0) { + this.gender = "男"; + } else { + this.gender = "女"; + } + } + + public String getSn() { + if (TextUtils.isEmpty(sn)) { + return ""; + } + return sn; + } + + public void setSn(String sn) { + this.sn = sn; + } + + public String getUserHead() { + if (TextUtils.isEmpty(userHead)) { + return ""; + } + return userHead; + } + + public void setUserHead(String userHead) { + this.userHead = userHead; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getUserName() { + if (TextUtils.isEmpty(userName)) { + return "用户未设置昵称"; + } + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public void setUserId(long userId) { + this.userId = userId; + } + + public String getLastActiveweekAvgscore() { + return lastActiveweekAvgscore; + } + + public void setLastActiveweekAvgscore(String lastActiveweekAvgscore) { + this.lastActiveweekAvgscore = lastActiveweekAvgscore; + } + + public String getSafeLabel() { + return safeLabel; + } + + public void setSafeLabel(String safeLabel) { + this.safeLabel = safeLabel; + } + + public int getSafeLabelType() { + return safeLabelType; + } + + public void setSafeLabelType(int safeLabelType) { + this.safeLabelType = safeLabelType; + } + + @Override + public String toString() { + return "MarkerUserInfo{" + + "sn='" + sn + '\'' + + ", userId=" + userId + + ", userName='" + userName + '\'' + + ", userHead='" + userHead + '\'' + + ", gender='" + gender + '\'' + + ", age=" + age + + ", lastActiveweekAvgscore='" + lastActiveweekAvgscore + '\'' + + ", safeLabel='" + safeLabel + '\'' + + ", safeLabelType=" + safeLabelType + + '}'; + } +} diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/RoadInfoRequest.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/RoadInfoRequest.java new file mode 100644 index 0000000..185a3ac --- /dev/null +++ b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/RoadInfoRequest.java @@ -0,0 +1,58 @@ +package com.mogo.tanlu.bean; + +import com.mogo.tanlu.bean.location.Location; + +import java.util.ArrayList; + +/** + * @author lixiaopeng + * @description + * @since 2021/1/20 + */ +public class RoadInfoRequest { + + private Location location; + private ArrayList poiTypes; + private boolean onlyFocus; + private boolean onlySameCity; + + public RoadInfoRequest(Location location, ArrayList poiTypes, boolean onlyFocus, boolean onlySameCity) { + this.location = location; + this.poiTypes = poiTypes; + this.onlyFocus = onlyFocus; + this.onlySameCity = onlySameCity; + } + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public ArrayList getPoiTypes() { + return poiTypes; + } + + public void setPoiTypes(ArrayList poiTypes) { + this.poiTypes = poiTypes; + } + + public boolean isOnlyFocus() { + return onlyFocus; + } + + public void setOnlyFocus(boolean onlyFocus) { + this.onlyFocus = onlyFocus; + } + + public boolean isOnlySameCity() { + return onlySameCity; + } + + public void setOnlySameCity(boolean onlySameCity) { + this.onlySameCity = onlySameCity; + } + +} diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/RoadInfos.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/RoadInfos.java index 281559b..bbe3950 100644 --- a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/RoadInfos.java +++ b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/RoadInfos.java @@ -9,13 +9,13 @@ import java.util.List; */ public class RoadInfos { - private List data; + private List data; - public List getData() { + public List getData() { return data; } - public void setData(List data) { + public void setData(List data) { this.data = data; } } diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/TanluMarkerExploreWay.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/TanluMarkerExploreWay.java deleted file mode 100644 index 8a904f0..0000000 --- a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/TanluMarkerExploreWay.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.mogo.tanlu.bean; - -import java.io.Serializable; - -/** - * @author lixiaopeng - * @description - * @since 2021/1/20 - */ -public class TanluMarkerExploreWay implements Serializable { - -} diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/location/Location.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/location/Location.java new file mode 100644 index 0000000..e1a3084 --- /dev/null +++ b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/location/Location.java @@ -0,0 +1,29 @@ +package com.mogo.tanlu.bean.location; + +import java.io.Serializable; + +/** + * @author lixiaopeng + * @description + * @since 2021/1/20 + */ +public class Location implements Serializable { + private double lat; + private double lon; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLon() { + return lon; + } + + public void setLon(double lon) { + this.lon = lon; + } +} diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/location/MarkerLocation.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/location/MarkerLocation.java new file mode 100644 index 0000000..428444b --- /dev/null +++ b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/location/MarkerLocation.java @@ -0,0 +1,64 @@ +package com.mogo.tanlu.bean.location; + + +import android.text.TextUtils; + +import java.io.Serializable; + +/** + * @description + * + * @author lixiaopeng + * @since 2021/1/20 + */ +public class MarkerLocation implements Serializable { + private double lat;//纬度 + private double lon;//经度 + private double angle;//车头角度,可以没有 + private String address;//具体的位置信息 + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLon() { + return lon; + } + + public void setLon(double lon) { + this.lon = lon; + } + + public double getAngle() { + return angle; + } + + public void setAngle(double angle) { + this.angle = angle; + } + + public String getAddress() { + if (TextUtils.isEmpty(address)) { + return ""; + } + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + @Override + public String toString() { + return "MarkerLocation{" + + "lat=" + lat + + ", lon=" + lon + + ", angle=" + angle + + ", address='" + address + '\'' + + '}'; + } +} diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/location/MogoLocation.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/location/MogoLocation.java new file mode 100644 index 0000000..7085274 --- /dev/null +++ b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/bean/location/MogoLocation.java @@ -0,0 +1,379 @@ +package com.mogo.tanlu.bean.location; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * @author lixiaopeng + * @description + * @since 2021/1/20 + */ +public class MogoLocation implements Cloneable, Parcelable { + private int locType = 0; + private double latitude = 0; + private double longitude = 0; + private double altitude = 0; + private long time = 0; + private float bearing = 0; + private float accuracy = 0; + private float speed = 0; + private String cityName = ""; + private String cityCode = ""; + private String provider = ""; + private String address = ""; + private String district = ""; + private String province = ""; + private String adCode = ""; + private String locationDetail = ""; + private String poiName = ""; + private String aoiName = ""; + private int errCode = 0; + private String errInfo = ""; + private String street = ""; + private String streetNum = ""; + private String description = ""; + private String buildingId = ""; + private String floor = ""; + private int gpsAccuracyStatus = 0; + private int satellite = 0; + + public float getBearing() { + return bearing; + } + + public void setBearing( float bearing ) { + this.bearing = bearing; + } + + public float getAccuracy() { + return accuracy; + } + + public void setAccuracy( float accuracy ) { + this.accuracy = accuracy; + } + + public String getProvider() { + return provider; + } + + public void setProvider( String provider ) { + this.provider = provider; + } + + public float getSpeed() { + return speed; + } + + public void setSpeed( float speed ) { + this.speed = speed; + } + + public String getLocationDetail() { + return locationDetail; + } + + public void setLocationDetail( String locationDetail ) { + this.locationDetail = locationDetail; + } + + public String getPoiName() { + return poiName; + } + + public void setPoiName( String poiName ) { + this.poiName = poiName; + } + + public String getAoiName() { + return aoiName; + } + + public void setAoiName( String aoiName ) { + this.aoiName = aoiName; + } + + public int getErrCode() { + return errCode; + } + + public void setErrCode( int errCode ) { + this.errCode = errCode; + } + + public String getErrInfo() { + return errInfo; + } + + public void setErrInfo( String errInfo ) { + this.errInfo = errInfo; + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getStreetNum() { + return streetNum; + } + + public void setStreetNum( String streetNum ) { + this.streetNum = streetNum; + } + + public String getDescription() { + return description; + } + + public void setDescription( String description ) { + this.description = description; + } + + public String getBuildingId() { + return buildingId; + } + + public void setBuildingId( String buildingId ) { + this.buildingId = buildingId; + } + + public String getFloor() { + return floor; + } + + public void setFloor( String floor ) { + this.floor = floor; + } + + public int getGpsAccuracyStatus() { + return gpsAccuracyStatus; + } + + public void setGpsAccuracyStatus( int gpsAccuracyStatus ) { + this.gpsAccuracyStatus = gpsAccuracyStatus; + } + + public int getSatellite() { + return satellite; + } + + public void setSatellite( int satellite ) { + this.satellite = satellite; + } + + public MogoLocation() { + } + + @Override + public String toString() { + return "MogoLocation{" + + "locType=" + locType + + ", latitude=" + latitude + + ", longitude=" + longitude + + ", altitude=" + altitude + + ", time=" + time + + ", bearing=" + bearing + + ", accuracy=" + accuracy + + ", speed=" + speed + + ", cityName='" + cityName + '\'' + + ", cityCode='" + cityCode + '\'' + + ", provider='" + provider + '\'' + + ", address='" + address + '\'' + + ", district='" + district + '\'' + + ", province='" + province + '\'' + + ", adCode='" + adCode + '\'' + + ", locationDetail='" + locationDetail + '\'' + + ", poiName='" + poiName + '\'' + + ", aoiName='" + aoiName + '\'' + + ", errCode=" + errCode + + ", errInfo='" + errInfo + '\'' + + ", street='" + street + '\'' + + ", streetNum='" + streetNum + '\'' + + ", description='" + description + '\'' + + ", buildingId='" + buildingId + '\'' + + ", floor='" + floor + '\'' + + ", gpsAccuracyStatus=" + gpsAccuracyStatus + + ", satellite=" + satellite + + '}'; + } + + public double getAltitude() { + return altitude; + } + + public void setAltitude( double altitude ) { + this.altitude = altitude; + } + + public String getAddress() { + return address; + } + + public void setAddress( String address ) { + this.address = address; + } + + public String getDistrict() { + return district; + } + + public void setDistrict( String district ) { + this.district = district; + } + + public String getProvince() { + return province; + } + + public void setProvince( String province ) { + this.province = province; + } + + public String getAdCode() { + return adCode; + } + + public void setAdCode( String adCode ) { + this.adCode = adCode; + } + + public int getLocType() { + return locType; + } + + public void setLocType( int locType ) { + this.locType = locType; + } + + public double getLatitude() { + return latitude; + } + + public void setLatitude( double latitude ) { + this.latitude = latitude; + } + + public double getLongitude() { + return longitude; + } + + public void setLongitude( double longitude ) { + this.longitude = longitude; + } + + public long getTime() { + return time; + } + + public void setTime( long time ) { + this.time = time; + } + + public String getCityCode() { + return cityCode; + } + + public void setCityCode( String cityCode ) { + this.cityCode = cityCode; + } + + public String getCityName() { + return cityName; + } + + public void setCityName( String cityName ) { + this.cityName = cityName; + } + + @Override + public MogoLocation clone() { + try { + return ( MogoLocation ) super.clone(); + } catch ( CloneNotSupportedException e ) { + e.printStackTrace(); + } + return this; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags ) { + dest.writeInt( this.locType ); + dest.writeDouble( this.latitude ); + dest.writeDouble( this.longitude ); + dest.writeDouble( this.altitude ); + dest.writeLong( this.time ); + dest.writeFloat( this.bearing ); + dest.writeFloat( this.accuracy ); + dest.writeFloat( this.speed ); + dest.writeString( this.cityName ); + dest.writeString( this.cityCode ); + dest.writeString( this.provider ); + dest.writeString( this.address ); + dest.writeString( this.district ); + dest.writeString( this.province ); + dest.writeString( this.adCode ); + dest.writeString( this.locationDetail ); + dest.writeString( this.poiName ); + dest.writeString( this.aoiName ); + dest.writeInt( this.errCode ); + dest.writeString( this.errInfo ); + dest.writeString( this.street ); + dest.writeString( this.streetNum ); + dest.writeString( this.description ); + dest.writeString( this.buildingId ); + dest.writeString( this.floor ); + dest.writeInt( this.gpsAccuracyStatus ); + dest.writeInt( this.satellite ); + } + + protected MogoLocation( Parcel in ) { + this.locType = in.readInt(); + this.latitude = in.readDouble(); + this.longitude = in.readDouble(); + this.altitude = in.readDouble(); + this.time = in.readLong(); + this.bearing = in.readFloat(); + this.accuracy = in.readFloat(); + this.speed = in.readFloat(); + this.cityName = in.readString(); + this.cityCode = in.readString(); + this.provider = in.readString(); + this.address = in.readString(); + this.district = in.readString(); + this.province = in.readString(); + this.adCode = in.readString(); + this.locationDetail = in.readString(); + this.poiName = in.readString(); + this.aoiName = in.readString(); + this.errCode = in.readInt(); + this.errInfo = in.readString(); + this.street = in.readString(); + this.streetNum = in.readString(); + this.description = in.readString(); + this.buildingId = in.readString(); + this.floor = in.readString(); + this.gpsAccuracyStatus = in.readInt(); + this.satellite = in.readInt(); + } + + public static final Parcelable.Creator< MogoLocation > CREATOR = new Parcelable.Creator< MogoLocation >() { + @Override + public MogoLocation createFromParcel( Parcel source ) { + return new MogoLocation( source ); + } + + @Override + public MogoLocation[] newArray( int size ) { + return new MogoLocation[size]; + } + }; +} diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/impl/LoadUploadImpl.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/impl/LoadUploadImpl.java new file mode 100644 index 0000000..f298ba0 --- /dev/null +++ b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/impl/LoadUploadImpl.java @@ -0,0 +1,22 @@ +package com.mogo.tanlu.impl; + +import android.util.Log; + +import com.elegant.spi.annotations.Service; +import com.mogo.tanlu.api.ILoadUpload; +import com.mogo.tanlu.bean.InformationBody; + +/** + * @author lixiaopeng + * @description 请求上报 + * @since 2021/1/20 + */ +@Service(value = LoadUploadImpl.class, unit = "tanlu") +public class LoadUploadImpl implements ILoadUpload { + @Override + public void loadUpload(String sn, InformationBody informationBody) { + //TODO + Log.d("liyz", "loadUpload sn = " + sn); + + } +} diff --git a/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/impl/TanluUploadImpl.java b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/impl/TanluUploadImpl.java new file mode 100644 index 0000000..5b8c96d --- /dev/null +++ b/modules/mogo-tanlu/src/main/java/com/mogo/tanlu/impl/TanluUploadImpl.java @@ -0,0 +1,27 @@ +package com.mogo.tanlu.impl; + +import android.util.Log; + +import com.elegant.spi.annotations.Service; +import com.mogo.tanlu.api.ITanluUpload; +import com.mogo.tanlu.bean.UploadResult; + +/** + * @author lixiaopeng + * @description + * @since 2021/1/20 + */ +@Service(value = ITanluUpload.class, unit = "tanlu") +public class TanluUploadImpl implements ITanluUpload { + + @Override + public void onSuccess(UploadResult result) { + Log.d("liyz", "onSuccess ----->"); + } + + @Override + public void onFailure(int code) { + Log.e("liyz", "onFailure ----->"); + } + +} From dd8fc1f61761701228d84e1b06839ad3c0a8e054 Mon Sep 17 00:00:00 2001 From: wujifei Date: Thu, 21 Jan 2021 11:25:21 +0800 Subject: [PATCH 04/28] =?UTF-8?q?=E6=B7=BB=E5=8A=A0HttpLoggingInterceptor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foudations/mogo-commons/build.gradle | 5 ++- .../cloud/commons/network/RetrofitFactory.kt | 2 ++ .../mogo/cloud/commons/utils/CheckUtils.kt | 31 ------------------- 3 files changed, 4 insertions(+), 34 deletions(-) delete mode 100644 foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/utils/CheckUtils.kt diff --git a/foudations/mogo-commons/build.gradle b/foudations/mogo-commons/build.gradle index 6bbcf78..a0467e3 100644 --- a/foudations/mogo-commons/build.gradle +++ b/foudations/mogo-commons/build.gradle @@ -27,10 +27,9 @@ android { dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation rootProject.ext.dependencies.androidxccorektx implementation rootProject.ext.dependencies.androidxappcompat - + implementation rootProject.ext.dependencies.okhttpinterceptor api rootProject.ext.dependencies.retrofit api rootProject.ext.dependencies.retrofitadapter api rootProject.ext.dependencies.retrofitconvertergson @@ -38,5 +37,5 @@ dependencies { implementation project(path: ':foudations:mogo-httpdns') implementation project(path: ':foudations:mogo-passport') - implementation rootProject.ext.dependencies.okhttpinterceptor + } \ No newline at end of file diff --git a/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/RetrofitFactory.kt b/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/RetrofitFactory.kt index ca44186..c8593ca 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/RetrofitFactory.kt +++ b/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/network/RetrofitFactory.kt @@ -46,4 +46,6 @@ object RetrofitFactory { } + + } \ No newline at end of file diff --git a/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/utils/CheckUtils.kt b/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/utils/CheckUtils.kt deleted file mode 100644 index 0ff9bbc..0000000 --- a/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/utils/CheckUtils.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.mogo.cloud.commons.utils - -import android.content.Context -import android.net.ConnectivityManager -import android.net.NetworkInfo - -/** - * created by wujifei on 2021/1/20 11:04 - * describe: - */ -class CheckUtils { - - companion object { - /** - * 网络是否可用 - */ - fun isNetworkConnected(context: Context?): Boolean { - if (context == null) { - return false - } - val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager - var network: NetworkInfo? = null - if (cm != null) { - network = cm.activeNetworkInfo - } - return network != null && network.isAvailable && network.isConnected - } - } - - -} \ No newline at end of file From 784861d3ff1ff7b33aa188570a3cfb41c8ac1ece Mon Sep 17 00:00:00 2001 From: liujing Date: Wed, 20 Jan 2021 21:19:38 +0800 Subject: [PATCH 05/28] =?UTF-8?q?[add]=20=E6=9A=82=E5=AD=98snapshotuploadi?= =?UTF-8?q?ntime=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/mogo-realtime/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/mogo-realtime/build.gradle b/modules/mogo-realtime/build.gradle index d969b5b..ccea2ad 100644 --- a/modules/mogo-realtime/build.gradle +++ b/modules/mogo-realtime/build.gradle @@ -28,5 +28,5 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - + implementation project(":foudations:mogo-commons") } \ No newline at end of file From b00e553fd4a09763c9b454f74adcb0418854cec2 Mon Sep 17 00:00:00 2001 From: liujing Date: Wed, 20 Jan 2021 21:20:14 +0800 Subject: [PATCH 06/28] [add] --- .../cloud/commons/utils/CoordinateUtils.java | 119 ++++++++ .../constant/SnapshotUploadInTime.java | 120 ++++++++ .../realtime/entity/ADASRecognizedResult.java | 72 +++++ .../realtime/entity/CloudLocationInfo.java | 174 ++++++++++++ .../realtime/location/LocationResult.java | 35 +++ .../realtime/location/MogoRTKLocation.java | 179 ++++++++++++ .../com/mogo/realtime/util/MortonCode.java | 149 ++++++++++ .../util/SimpleLocationCorrectStrategy.java | 257 ++++++++++++++++++ .../realtime/websocket/LocationResult.java | 36 +++ .../websocket/OnePerSecondSendContent.java | 27 ++ 10 files changed, 1168 insertions(+) create mode 100644 foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/utils/CoordinateUtils.java create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/constant/SnapshotUploadInTime.java create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/ADASRecognizedResult.java create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/CloudLocationInfo.java create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/location/LocationResult.java create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/location/MogoRTKLocation.java create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/util/MortonCode.java create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/util/SimpleLocationCorrectStrategy.java create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/websocket/LocationResult.java create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/websocket/OnePerSecondSendContent.java diff --git a/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/utils/CoordinateUtils.java b/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/utils/CoordinateUtils.java new file mode 100644 index 0000000..93aec7a --- /dev/null +++ b/foudations/mogo-commons/src/main/java/com/mogo/cloud/commons/utils/CoordinateUtils.java @@ -0,0 +1,119 @@ +package com.mogo.cloud.commons.utils; + +/** + * @author donghongyu + */ +public class CoordinateUtils { + + private static double a = 6378245.0; + private static double ee = 0.00669342162296594323; + + /** + * 手机GPS坐标转火星坐标 + * + * @return + */ + public static double[] transformFromWGSToGCJ( double lat, double lon ) { + + //如果在国外,则默认不进行转换 + if ( outOfChina( lat, lon ) ) { + return new double[]{lat, lon}; + } + double dLat = transformLat( lon - 105.0, lat - 35.0 ); + double dLon = transformLon( lon - 105.0, lat - 35.0 ); + double radLat = lat / 180.0 * Math.PI; + double magic = Math.sin( radLat ); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt( magic ); + dLat = ( dLat * 180.0 ) / ( ( a * ( 1 - ee ) ) / ( magic * sqrtMagic ) * Math.PI ); + dLon = ( dLon * 180.0 ) / ( a / sqrtMagic * Math.cos( radLat ) * Math.PI ); + + return new double[]{lat + dLat, lon + dLon}; + } + + public static double transformLat( double x, double y ) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt( x > 0 ? x : -x ); + ret += ( 20.0 * Math.sin( 6.0 * x * Math.PI ) + 20.0 * Math.sin( 2.0 * x * Math.PI ) ) * 2.0 / 3.0; + ret += ( 20.0 * Math.sin( y * Math.PI ) + 40.0 * Math.sin( y / 3.0 * Math.PI ) ) * 2.0 / 3.0; + ret += ( 160.0 * Math.sin( y / 12.0 * Math.PI ) + 320 * Math.sin( y * Math.PI / 30.0 ) ) * 2.0 / 3.0; + return ret; + } + + public static double transformLon( double x, double y ) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt( x > 0 ? x : -x ); + ret += ( 20.0 * Math.sin( 6.0 * x * Math.PI ) + 20.0 * Math.sin( 2.0 * x * Math.PI ) ) * 2.0 / 3.0; + ret += ( 20.0 * Math.sin( x * Math.PI ) + 40.0 * Math.sin( x / 3.0 * Math.PI ) ) * 2.0 / 3.0; + ret += ( 150.0 * Math.sin( x / 12.0 * Math.PI ) + 300.0 * Math.sin( x / 30.0 * Math.PI ) ) * 2.0 / 3.0; + return ret; + } + + public static boolean outOfChina( double lat, double lon ) { + if ( lon < 72.004 || lon > 137.8347 ) + return true; + if ( lat < 0.8293 || lat > 55.8271 ) + return true; + return false; + } + + public static final double[] transformGcj02toWgs84( double lat, double lng ) { + double[] var10000; + if ( outOfChina( lat, lng ) ) { + var10000 = new double[]{lng, lat}; + } else { + double dlat = transformLat( lng - 105.0D, lat - 35.0D ); + double dlng = transformLon( lng - 105.0D, lat - 35.0D ); + double radlat = lat / 180.0D * Math.PI; + double magic = Math.sin( radlat ); + magic = ( double ) 1 - 0.006693421622965943D * magic * magic; + double sqrtmagic = Math.sqrt( magic ); + dlat = dlat * 180.0D / ( 6335552.717000426D / ( magic * sqrtmagic ) * Math.PI ); + dlng = dlng * 180.0D / ( 6378245.0D / sqrtmagic * Math.cos( radlat ) * Math.PI ); + double mglat = lat + dlat; + double mglng = lng + dlng; + var10000 = new double[]{lng * ( double ) 2 - mglng, lat * ( double ) 2 - mglat}; + } + + return var10000; + } + + /** + * @param lon1 + * @param lat1 + * @param lon2 + * @param lat2 + * @return 两坐标的距离 单位:米(M) + */ + public static float calculateLineDistance( double lon1, double lat1, double lon2, double lat2 ) { + try { + double var2 = lon1; + double var4 = lat1; + double var6 = lon2; + double var8 = lat2; + var2 *= 0.01745329251994329D; + var4 *= 0.01745329251994329D; + var6 *= 0.01745329251994329D; + var8 *= 0.01745329251994329D; + double var10 = Math.sin( var2 ); + double var12 = Math.sin( var4 ); + double var14 = Math.cos( var2 ); + double var16 = Math.cos( var4 ); + double var18 = Math.sin( var6 ); + double var20 = Math.sin( var8 ); + double var22 = Math.cos( var6 ); + double var24 = Math.cos( var8 ); + double[] var28 = new double[3]; + double[] var29 = new double[3]; + var28[0] = var16 * var14; + var28[1] = var16 * var10; + var28[2] = var12; + var29[0] = var24 * var22; + var29[1] = var24 * var18; + var29[2] = var20; + return ( float ) ( Math.asin( Math.sqrt( ( var28[0] - var29[0] ) * ( var28[0] - var29[0] ) + ( var28[1] - var29[1] ) * ( var28[1] - var29[1] ) + ( var28[2] - var29[2] ) * ( var28[2] - var29[2] ) ) / 2.0D ) * 1.27420015798544E7D ); + } catch ( Throwable var26 ) { + var26.printStackTrace(); + return 0.0F; + } + } + +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/constant/SnapshotUploadInTime.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/constant/SnapshotUploadInTime.java new file mode 100644 index 0000000..54026d1 --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/constant/SnapshotUploadInTime.java @@ -0,0 +1,120 @@ +package com.mogo.realtime.constant; + +import android.content.Context; + +import com.mogo.realtime.entity.ADASRecognizedResult; +import com.mogo.realtime.entity.CloudLocationInfo; +import com.mogo.realtime.location.LocationResult; +import com.mogo.realtime.location.MogoRTKLocation; +import com.mogo.realtime.util.MortonCode; +import com.mogo.realtime.util.SimpleLocationCorrectStrategy; +import com.mogo.realtime.websocket.OnePerSecondSendContent; + +import java.util.List; +import java.util.logging.Logger; + +/** + * @author congtaowang + * @since 2020/12/14 + * + * 实时上报坐标、识别物体 + */ +public class SnapshotUploadInTime implements MogoRTKLocation.RTKLocationListener { + + private static final String TAG = "SnapshotUploadInTime"; + + private static volatile SnapshotUploadInTime sInstance; + private Context mContext; + + private SnapshotUploadInTime() { + } + + public static SnapshotUploadInTime getInstance() { + if ( sInstance == null ) { + synchronized ( SnapshotUploadInTime.class ) { + if ( sInstance == null ) { + sInstance = new SnapshotUploadInTime(); + } + } + } + return sInstance; + } + + public synchronized void release() { + sInstance = null; + } + + private Object readResolve() { + // 阻止反序列化,必须实现 Serializable 接口 + return sInstance; + } + + public void start( Context context ) { + mContext = context.getApplicationContext(); + MogoRTKLocation.getInstance().registerRTKLocationListener( this ); + } + + public void stop() { + MogoRTKLocation.getInstance().unregisterRTKLocationListener(); + MogoRTKLocation.getInstance().stop(); + } + + @Override + public void onLocationChanged( List< CloudLocationInfo > cloudLocationInfos ) { + startSendCarLocationAndAdasRecognizedResult2Server( cloudLocationInfos ); + } + + private CloudLocationInfo mLastInfo; + + private void startSendCarLocationAndAdasRecognizedResult2Server( List< CloudLocationInfo > cloudLocationInfo ) { + CloudLocationInfo lastInfo = null; + // 如果数组内容不为空,就用数组最后一个值 + if ( cloudLocationInfo != null && !cloudLocationInfo.isEmpty() ) { + lastInfo = cloudLocationInfo.get( cloudLocationInfo.size() - 1 ); + mLastInfo = lastInfo; + } + if ( lastInfo == null ) { + lastInfo = mLastInfo; + } + LocationResult locationResult = null; + if ( lastInfo != null ) { + // 定位点预测纠偏 + lastInfo = SimpleLocationCorrectStrategy.getInstance().correct( lastInfo ); + locationResult = new LocationResult(); + if ( lastInfo != null ) { + locationResult.lastCoordinate = lastInfo; + locationResult.mortonCode = MortonCode.wrapEncodeMorton( lastInfo.getLon(), lastInfo.getLat() ); + } +// locationResult.coordinates = new ArrayList<>(); + locationResult.sn = com.mogo.commons.network.Utils.getSn(); +// if ( cloudLocationInfo == null ) { +// locationResult.coordinates.addAll( new ArrayList<>() ); +// } else { +// locationResult.coordinates.addAll( cloudLocationInfo ); +// } + } + List recognizedResults = null;//MarkerServiceHandler.getADASController().getLastADASRecognizedResult();//外显接口返回 + OnePerSecondSendContent content = new OnePerSecondSendContent(); + content.self = locationResult; + content.adas = recognizedResults; + + if ( content.self == null && + ( content.adas == null || content.adas.isEmpty() ) ) { + Logger.d( TAG, "no information 2 sent" ); + return; + } + + + MarkerServiceHandler.getApis().getWebSocketManagerApi( mContext ).sendMsg( content, new IMogoOnWebSocketMessageListener() { + @Override + public WebSocketMsgType getDownLinkType() { + return null; + } + + @Override + public WebSocketMsgType getUpLinkType() { + return WebSocketMsgType.MSG_TYPE_UPLINK_CAR_DATA; + } + } ); + } +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/ADASRecognizedResult.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/ADASRecognizedResult.java new file mode 100644 index 0000000..ab8a0b7 --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/ADASRecognizedResult.java @@ -0,0 +1,72 @@ +package com.mogo.realtime.entity; + +public +/** + * @author congtaowang + * @since 2020/10/25 + * + * adas 识别物体参数 + */ +class ADASRecognizedResult { + + /** + * 识别物体类型 + */ + public int type; + + /** + * 识别物体唯一标识 + */ + public String uuid; + + /** + * 红绿灯颜色 + */ + public String color; + + /** + * + */ + public String carId; + + /** + * 识别物体的纬度 + */ + public double lat; + + /** + * 识别物体的经度 + */ + public double lon; + + /** + * 朝向 + */ + public double heading; + + /** + * 系统时间 + */ + public long systemTime; + + /** + * 定位卫星时间 + */ + public long satelliteTime; + + /** + * 海拔 + */ + public double alt; + + /** + * 速度 + */ + public double speed; + + /** + * 莫顿码 + */ + public long mortonCode; + +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/CloudLocationInfo.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/CloudLocationInfo.java new file mode 100644 index 0000000..ea09ba1 --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/CloudLocationInfo.java @@ -0,0 +1,174 @@ +package com.mogo.realtime.entity; + +import android.os.Parcel; +import android.os.Parcelable; + +import com.mogo.utils.CoordinateUtils; + +import java.util.Objects; + +/** + * 云端定位信息和自车定位信息 + * + * @author tongchenfei + */ +public class CloudLocationInfo implements Parcelable { + private double lat; + private double lon; + private double heading; + private long systemTime; + private long satelliteTime; + private double alt; + private double speed; + + public CloudLocationInfo() { + } + + public CloudLocationInfo(CloudLocationInfo info ) { + this.lat = info.getLat(); + this.lon = info.getLon(); + this.heading = info.getHeading(); + this.systemTime = System.currentTimeMillis(); + this.satelliteTime = System.currentTimeMillis(); + this.alt = info.alt; + this.speed = info.speed; + } + + public void convertCoor2GCJ02(){ + double[] amapCoord = CoordinateUtils.transformFromWGSToGCJ( lat, lon ); + if ( amapCoord != null ) { + this.lat = amapCoord[0]; + this.lon = amapCoord[1]; + } + } + + protected CloudLocationInfo(Parcel in ) { + lat = in.readDouble(); + lon = in.readDouble(); + heading = in.readDouble(); + systemTime = in.readLong(); + satelliteTime = in.readLong(); + alt = in.readDouble(); + speed = in.readDouble(); + } + + @Override + public void writeToParcel( Parcel dest, int flags ) { + dest.writeDouble( lat ); + dest.writeDouble( lon ); + dest.writeDouble( heading ); + dest.writeLong( systemTime ); + dest.writeLong( satelliteTime ); + dest.writeDouble( alt ); + dest.writeDouble( speed ); + } + + @Override + public int describeContents() { + return 0; + } + + public static final Creator< CloudLocationInfo > CREATOR = new Creator< CloudLocationInfo >() { + @Override + public CloudLocationInfo createFromParcel( Parcel in ) { + return new CloudLocationInfo( in ); + } + + @Override + public CloudLocationInfo[] newArray( int size ) { + return new CloudLocationInfo[size]; + } + }; + + public double getLat() { + return lat; + } + + public void setLat( double lat ) { + this.lat = lat; + } + + public double getLon() { + return lon; + } + + public void setLon( double lon ) { + this.lon = lon; + } + + public double getHeading() { + return heading; + } + + public void setHeading( double heading ) { + this.heading = heading; + } + + public long getSystemTime() { + return systemTime; + } + + public void setSystemTime( long systemTime ) { + this.systemTime = systemTime; + } + + public long getSatelliteTime() { + return satelliteTime; + } + + public void setSatelliteTime( long satelliteTime ) { + this.satelliteTime = satelliteTime; + } + + public double getAlt() { + return alt; + } + + public void setAlt( double alt ) { + this.alt = alt; + } + + public double getSpeed() { + return speed; + } + + public void setSpeed( double speed ) { + this.speed = speed; + } + + @Override + public String toString() { + return "CloudLocationInfo{" + + "lat=" + lat + + ", lon=" + lon + + ", heading=" + heading + + ", systemTime=" + systemTime + + ", satelliteTime=" + satelliteTime + + ", alt=" + alt + + ", speed=" + speed + + '}'; + } + + public String print() { + return "CloudLocation{ lon: " + lon + " lat: " + lat + " heading: " + heading + " speed: " + + speed + "}"; + } + + @Override + public boolean equals( Object o ) { + if ( this == o ) { + return true; + } + if ( o == null || getClass() != o.getClass() ) { + return false; + } + CloudLocationInfo that = ( CloudLocationInfo ) o; + return Double.compare( that.lat, lat ) == 0 && + Double.compare( that.lon, lon ) == 0; + } + + @Override + public int hashCode() { + return Objects.hash( lat, lon ); + } +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/location/LocationResult.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/location/LocationResult.java new file mode 100644 index 0000000..fb8ff9f --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/location/LocationResult.java @@ -0,0 +1,35 @@ +package com.mogo.realtime.location; + +import com.mogo.realtime.entity.CloudLocationInfo; + +import java.util.List; + +public +/** + * @author congtaowang + * @since 2020/10/25 + * + * 自车定位信息 + */ +class LocationResult { + + /** + * sn + */ + public String sn; + + /** + * 最后一个定位点的莫顿码 + */ + public long mortonCode; + + /** + * 最后一个定位点 + */ + public CloudLocationInfo lastCoordinate; + + /** + * 1s 内的连续定位点 + */ + public List< CloudLocationInfo > coordinates; +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/location/MogoRTKLocation.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/location/MogoRTKLocation.java new file mode 100644 index 0000000..68bcf03 --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/location/MogoRTKLocation.java @@ -0,0 +1,179 @@ +package com.mogo.realtime.location; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.location.Criteria; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; + +import com.mogo.realtime.entity.CloudLocationInfo; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Logger; + +public class MogoRTKLocation { + + private static final String TAG = "MogoRTKLocation"; + private static final int MSG_DATA_CHANGED = 0x100; + private static final long MSG_DATA_INTERNAL = 500L; + + private Handler mHandler; + private LocationManager locationManager; + private RTKLocationListener rtkLocationListener; + private List cacheList = new ArrayList<>(); + + public static MogoRTKLocation getInstance() { + return RTKHolder.rtkLoc; + } + + private static class RTKHolder { + private static final MogoRTKLocation rtkLoc = new MogoRTKLocation(); + } + + private MogoRTKLocation() { + mHandler = new Handler(WorkThreadHandler.newInstance( TAG ).getLooper() ) { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if (msg.what == MSG_DATA_CHANGED) { + mHandler.sendEmptyMessageDelayed(MSG_DATA_CHANGED, uploadDelay); + sendLocationData(); + +// Logger.d(TAG,"handleMessage开始发送消息"); + } + } + }; + mHandler.sendEmptyMessage(MSG_DATA_CHANGED); + Logger.d(TAG,"构造方法开始发送消息"); + } + + public interface RTKLocationListener { + void onLocationChanged(List cloudLocationInfos); + } + + private void sendLocationData() { + + if (rtkLocationListener != null) { + List list = new ArrayList<>(cacheList); + rtkLocationListener.onLocationChanged(list); + } + if (cacheList != null && cacheList.size() > 0) { + cacheList.clear(); + } + } + + public void registerRTKLocationListener(RTKLocationListener locationListener) { + rtkLocationListener = locationListener; + } + + public void unregisterRTKLocationListener(){ + rtkLocationListener = null; + } + + public void init() { + locationManager = (LocationManager) AbsMogoApplication.getApp().getApplicationContext().getSystemService(Context.LOCATION_SERVICE); + String provider = locationManager.getBestProvider(getCriteria(), true); + Logger.d(TAG, "init provider : " + provider); + if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { + try { + locationManager.requestLocationUpdates(provider, 0, 0, locationListener); + Location location = locationManager.getLastKnownLocation(provider); + if (location != null) { + Logger.i(TAG, "location : " + location.toString()); + } + } catch (Exception e) { + e.printStackTrace(); + Logger.d(TAG, "RTK LocationManager requestLocationUpdates has Exception : " + e.getMessage()); + } + } else { + Logger.d(TAG, "RTK LocationManager Provider GPS_PROVIDER unable"); + } + + // 注册修改上报间隔的广播, 临时使用,后面可直接干掉,发送广播的地方在EntranceFragment + IntentFilter filter = new IntentFilter("com.mogo.launcher.action.FIX_UPLOAT_DELAY"); + AbsMogoApplication.getApp().registerReceiver(fixUploadDelayReceiver, filter); + } + + private Criteria getCriteria() { + Criteria criteria = new Criteria(); + criteria.setAccuracy(Criteria.ACCURACY_FINE); //高精 + criteria.setAltitudeRequired(false); + criteria.setBearingRequired(true); + criteria.setSpeedRequired(true); + criteria.setPowerRequirement(Criteria.POWER_LOW); + return criteria; + } + + private LocationListener locationListener = new LocationListener() { + @Override + public void onLocationChanged(Location location) { + if (location != null) { + CloudLocationInfo cloudLocationInfo = new CloudLocationInfo(); + cloudLocationInfo.setAlt(location.getAltitude()); + cloudLocationInfo.setHeading(location.getBearing()); + cloudLocationInfo.setLat(location.getLatitude()); + cloudLocationInfo.setLon(location.getLongitude()); + cloudLocationInfo.setSpeed(location.getSpeed()); + cloudLocationInfo.setSatelliteTime(location.getTime()); + cloudLocationInfo.setSystemTime(System.currentTimeMillis()); + cloudLocationInfo.convertCoor2GCJ02(); + cacheList.add(cloudLocationInfo); + } else { + Logger.e(TAG, "location == null"); + } + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + Logger.d(TAG, "onStatusChanged status: " + status); + } + + @Override + public void onProviderEnabled(String provider) { + Logger.d(TAG, "onProviderEnabled"); + } + + @Override + public void onProviderDisabled(String provider) { + Logger.d(TAG, "onProviderEnabled"); + } + }; + + public void stop() { + Logger.d(TAG, "stop RTK Location"); + if (locationManager != null && locationListener != null) { + locationManager.removeUpdates(locationListener); + } else { + Logger.d(TAG, "stop failed , reason : loc" + locationManager + " , or loc listener: " + locationListener + " is null"); + } + } + + private long uploadDelay = MSG_DATA_INTERNAL; + + private FixUploadDelayReceiver fixUploadDelayReceiver = new FixUploadDelayReceiver(); + + private class FixUploadDelayReceiver extends BroadcastReceiver{ + @Override + public void onReceive(Context context, Intent intent) { + uploadDelay = intent.getIntExtra("fixTime", 0); + } + } + + /** + * 默认保持{@link #uploadDelay}间隔进行位置上报,如遇服务端控制,进行上报间隔修改 + * @param delay 上报间隔 + */ + public void resetUploadDelay(long delay) { + if (mHandler != null && mHandler.hasMessages(MSG_DATA_CHANGED)) { + mHandler.removeMessages(MSG_DATA_CHANGED); + mHandler.sendEmptyMessageDelayed(MSG_DATA_CHANGED, delay); + } + } +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/util/MortonCode.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/util/MortonCode.java new file mode 100644 index 0000000..90257fb --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/util/MortonCode.java @@ -0,0 +1,149 @@ +package com.mogo.realtime.util; + +import java.text.DecimalFormat; + +/** + * 莫顿编码 + * + * @author linyang + * @since 2020.07.09 + */ +public class MortonCode { + + /** + * morton 转 经纬度 时的中间常量 + */ + private static final long NDS_180_DEGREES = 0x7fffffff; + + /** + * morton 转 经纬度 时的中间常量 + */ + private static final long NDS_360_DEGREES = 4294967295L; + + /** + * morton 转 经纬度 时的中间常量 + */ + private static final long NDS_90_DEGREES = 0x3fffffff; + + /** + * 经纬度转 morton 时的中间常量 + */ + private static final double RULE_MORTON = Math.pow( 2, 32 ) / 360; + + /** + * morton 转 经纬度 时的中间常量 + */ + private static final double RULE_MORTON_TO_LONLAT = 360.0 / Math.pow( 2, 32 ); + + /** + * @param lon + * @param lat + * @return + */ + public static long wrapEncodeMorton( Double lon, Double lat ) { + DecimalFormat decimalFormat = new DecimalFormat( "#.######" ); + return encodeMorton( Double.valueOf( decimalFormat.format( lon ) ), + Double.valueOf( decimalFormat.format( lat ) ) ); + } + + /** + * 编码 morton code + * + * @param lon + * @param lat + * @return + */ + public static long encodeMorton( Double lon, Double lat ) { + + Long bit = 1L; + long mortonCode = 0L; + long x = ( long ) ( lon * RULE_MORTON ); + long y = ( long ) ( lat * RULE_MORTON ); + + if ( y < 0 ) { + y += 0x7FFFFFFF; + } + y = y << 1; + for ( int i = 0; i < 32; i++ ) { + // x-part + mortonCode = mortonCode | ( x & bit ); + x = x << 1; + bit = bit << 1; + // y-part + mortonCode = mortonCode | ( y & bit ); + y = y << 1; + bit = bit << 1; + } + + return mortonCode; + } + + /** + * 将莫顿码解码为坐标 + * + * @param mortonCode + * @return + */ + public static double[] decodeMorton( long mortonCode ) { + long[] midPoint = mortonCodeToCoord( mortonCode ); + normalizeCoord( midPoint ); + double[] point = new double[2]; + + // 将经纬度长整数转化为 浮点类型 + point[0] = midPoint[0] * RULE_MORTON_TO_LONLAT; + point[1] = midPoint[1] * RULE_MORTON_TO_LONLAT; + return point; + } + + /** + * 莫顿码分别拆解为 编码后的经纬度长整数 + * + * @param mortonCode + * @return + */ + private static long[] mortonCodeToCoord( long mortonCode ) { + long bit = 1L; + long[] longPoint = new long[2]; + + for ( int i = 0; i < 32; i++ ) { + longPoint[0] |= mortonCode & bit; + mortonCode >>= 1; + longPoint[1] |= mortonCode & bit; + bit <<= 1; + } + return longPoint; + } + + /** + * 对编码后的经纬度长整数进行解码 + * + * @param midPoint + */ + private static void normalizeCoord( long[] midPoint ) { + // if x > 180 degrees, then subtract 360 degrees + if ( midPoint[0] > NDS_180_DEGREES ) { + midPoint[0] -= + NDS_360_DEGREES + 1; // add 1 because 0 must be counted as well + } else if ( midPoint[0] < -NDS_180_DEGREES ) // if x < 180 , x += 360 + { + midPoint[0] += + NDS_360_DEGREES + 1; // add 1 because 0 must be counted as well + } + + // if y > 90 degrees, then subtract 180 degrees + if ( midPoint[1] > NDS_90_DEGREES ) { + midPoint[1] -= + NDS_180_DEGREES + 1; // add 1 because 0 must be counted as well + } else if ( midPoint[1] < -NDS_90_DEGREES ) // if y < 90, y += 180 + { + midPoint[1] += + NDS_180_DEGREES + 1; // add 1 because 0 must be counted as well + } + return; + } + + + public static void main( String[] args ) { + System.out.println( encodeMorton( 116.39584, 39.98152 ) ); + } +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/util/SimpleLocationCorrectStrategy.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/util/SimpleLocationCorrectStrategy.java new file mode 100644 index 0000000..d1d3795 --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/util/SimpleLocationCorrectStrategy.java @@ -0,0 +1,257 @@ +package com.mogo.realtime.util; + +import android.os.SystemClock; + +import com.mogo.map.MogoLatLng; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.module.common.entity.CloudLocationInfo; +import com.mogo.realtime.entity.CloudLocationInfo; +import com.mogo.utils.logger.Logger; + +import java.util.ArrayList; +import java.util.List; + +/** + * 定位预测纠错策略 + * + * @author tongchenfei + */ +public class SimpleLocationCorrectStrategy { + private static final String TAG = "SimpleLocationCorrectStrategy"; + private static final int ERR_COUNT_THRESHOLD = 3; + /** + * 目标距离误差是10米,就是在原目标距离基础上增加10米 + */ + private static final float TARGET_DISTANCE_DEVIATION = 10; + + private CloudLocationInfo lastLocation = null; + private long anchorTime; + private int errCount; + + private static SimpleLocationCorrectStrategy instance = new SimpleLocationCorrectStrategy(); + + public static SimpleLocationCorrectStrategy getInstance(){ + return instance; + } + + private List historyList = new ArrayList<>(); + private List validList = new ArrayList<>(); + private List correctList = new ArrayList<>(); + private List errList = new ArrayList<>(); + + public CloudLocationInfo correct(CloudLocationInfo info) { + Logger.d(TAG, "info: " + info.print()); + if(isLocationValid(info)) { + if(recordLocation()) { + historyList.add(info); + } + + if (lastLocation == null) { + lastLocation = info; + anchorTime = SystemClock.elapsedRealtime(); + Logger.d(TAG, "第一条数据"); + if(recordLocation()) { + validList.add(lastLocation); + } + return info; + } + if (lastLocation.equals(info)) { + Logger.d(TAG, "相同坐标点=="); + return info; + } + try { + float targetDistance = + (float) (lastLocation.getSpeed() * (SystemClock.elapsedRealtime() - anchorTime) / 1000) + TARGET_DISTANCE_DEVIATION; + float distance = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().calculateLineDistance(LocationParseUtil.cloudLocationToMogoLatLng(lastLocation), LocationParseUtil.cloudLocationToMogoLatLng(info)); + Logger.d(TAG, + "准备计算{ lastInfo: " + lastLocation.print() + " info: " + info.print() + " targetDistance: " + targetDistance + " distance : " + distance + "}"); + if (distance <= targetDistance) { + // 新的定位点在目标距离范围内,认为此数据有效 + lastLocation = info; + anchorTime = SystemClock.elapsedRealtime(); + errCount = 0; + Logger.d(TAG, "在范围内,为有效点"); + if(recordLocation()) { + validList.add(lastLocation); + } + return info; + } else { + // 出现异常点 + if (errCount >= ERR_COUNT_THRESHOLD) { + // 出错次数超过阈值,认为本次出错点为正确点 + if(recordLocation()) { + errList.add(new CloudLocationInfo(lastLocation)); + correctList.add(info); + } + lastLocation = info; + anchorTime = SystemClock.elapsedRealtime(); + errCount = 0; + Logger.d(TAG, "出错次数超限,异常点变有效点"); + return info; + } else { + // 按照上一个点的方向和速度,计算下一个点的位置,下一个点除坐标点外,其余数据与上一个点相同 + CloudLocationInfo nextInfo = new CloudLocationInfo(lastLocation); + MogoLatLng nextLatLon = computerThatLonLat(lastLocation.getLon(), + lastLocation.getLat(), lastLocation.getHeading(), targetDistance); + nextInfo.setLon(nextLatLon.lon); + nextInfo.setLat(nextLatLon.lat); + if(recordLocation()) { + errList.add(info); + correctList.add(nextInfo); + } + lastLocation = nextInfo; + anchorTime = SystemClock.elapsedRealtime(); + errCount++; + Logger.d(TAG, "异常点纠偏 info: " + lastLocation); +// return lastLocation; + if(recordLocation()) { + correctList.add(nextInfo); + } + return nextInfo; + } + } + } catch (Exception e) { + Logger.e(TAG, e, "纠偏异常"); + e.printStackTrace(); + } + }else{ + Logger.d(TAG, "定位点异常"); + if (lastLocation == null) { + return null; + }else{ + try { + float targetDistance = + (float) (lastLocation.getSpeed() * (SystemClock.elapsedRealtime() - anchorTime) / 1000) + TARGET_DISTANCE_DEVIATION; + float distance = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().calculateLineDistance(LocationParseUtil.cloudLocationToMogoLatLng(lastLocation), LocationParseUtil.cloudLocationToMogoLatLng(info)); + Logger.d(TAG, + "异常定位点\n准备计算{ lastInfo: " + lastLocation.print() + " info: " + info.print() + " targetDistance: " + targetDistance + " distance : " + distance + "}"); + // 按照上一个点的方向和速度,计算下一个点的位置,下一个点除坐标点外,其余数据与上一个点相同 + CloudLocationInfo nextInfo = new CloudLocationInfo(lastLocation); + MogoLatLng nextLatLon = computerThatLonLat(lastLocation.getLon(), + lastLocation.getLat(), lastLocation.getHeading(), targetDistance); + nextInfo.setLon(nextLatLon.lon); + nextInfo.setLat(nextLatLon.lat); + if(recordLocation()) { + errList.add(info); + correctList.add(nextInfo); + } + lastLocation = nextInfo; + anchorTime = SystemClock.elapsedRealtime(); + errCount++; + Logger.d(TAG, "异常点纠偏 info: " + lastLocation); + if(recordLocation()) { + correctList.add(nextInfo); + } +// return lastLocation; + return nextInfo; + }catch (Exception e){ + Logger.e(TAG, e, "纠偏异常"); + e.printStackTrace(); + } + } + } + return null; + } + + private boolean isLocationValid(CloudLocationInfo info) { + return info.getLat() != 0 && info.getLon() != 0; + } + + private RecordLocationListener recordLocationListener = null; + private boolean hasCallbackReocrd = false; + + public void setRecordLocationListener(RecordLocationListener recordLocationListener) { + this.recordLocationListener = recordLocationListener; + } + + private boolean recordLocation(){ + if (historyList.size() >= 100 && !hasCallbackReocrd && recordLocationListener != null) { + hasCallbackReocrd = true; + recordLocationListener.onRecordFinish(historyList, correctList,validList,correctList); + } + return historyList.size() < 100; + } + + + /** + * 根据距离和角度计算下一个经纬度 + * 大地坐标系资料WGS-84 长半径a=6378137 短半径b=6356752.3142 扁率f=1/298.2572236 + */ + public MogoLatLng computerThatLonLat(double lon, double lat, double brng, double dist) { + + double alpha1 = rad(brng); + double sinAlpha1 = Math.sin(alpha1); + double cosAlpha1 = Math.cos(alpha1); + + // 扁率f=1/298.2572236 + double f = 1 / 298.2572236; + double tanU1 = (1 - f) * Math.tan(rad(lat)); + double cosU1 = 1 / Math.sqrt((1 + tanU1 * tanU1)); + double sinU1 = tanU1 * cosU1; + double sigma1 = Math.atan2(tanU1, cosAlpha1); + double sinAlpha = cosU1 * sinAlpha1; + double cosSqAlpha = 1 - sinAlpha * sinAlpha; + // 长半径a=6378137 + double a = 6378137; + // 短半径b=6356752.3142 + double b = 6356752.3142; + double uSq = cosSqAlpha * (a * a - b * b) / (b * b); + double A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq))); + double B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq))); + + double cos2SigmaM=0; + double sinSigma=0; + double cosSigma=0; + double sigma = dist / (b * A), sigmaP = 2 * Math.PI; + while (Math.abs(sigma - sigmaP) > 1e-12) { + cos2SigmaM = Math.cos(2 * sigma1 + sigma); + sinSigma = Math.sin(sigma); + cosSigma = Math.cos(sigma); + double deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM) + - B / 6 * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM))); + sigmaP = sigma; + sigma = dist / (b * A) + deltaSigma; + } + + double tmp = sinU1 * sinSigma - cosU1 * cosSigma * cosAlpha1; + double lat2 = Math.atan2(sinU1 * cosSigma + cosU1 * sinSigma * cosAlpha1, + (1 - f) * Math.sqrt(sinAlpha * sinAlpha + tmp * tmp)); + double lambda = Math.atan2(sinSigma * sinAlpha1, cosU1 * cosSigma - sinU1 * sinSigma * cosAlpha1); + double C = f / 16 * cosSqAlpha * (4 + f * (4 - 3 * cosSqAlpha)); + double L = lambda - (1 - C) * f * sinAlpha + * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM))); + + // final bearing + double revAz = Math.atan2(sinAlpha, -tmp); + + System.out.println(revAz); + System.out.println(lon+deg(L)+","+deg(lat2)); + return new MogoLatLng(deg(lat2), lon + deg(L)); + } + + /** + * 度换成弧度 + * + * @param d + * 度 + * @return 弧度 + */ + private double rad(double d) { + return d * Math.PI / 180.0; + } + + /** + * 弧度换成度 + * + * @param x + * 弧度 + * @return 度 + */ + private double deg(double x) { + return x * 180 / Math.PI; + } + + public interface RecordLocationListener{ + void onRecordFinish(List history, List correct, List valid, List err); + } +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/websocket/LocationResult.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/websocket/LocationResult.java new file mode 100644 index 0000000..25ed4f2 --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/websocket/LocationResult.java @@ -0,0 +1,36 @@ +package com.mogo.realtime.websocket; + + +import com.mogo.realtime.entity.CloudLocationInfo; + +import java.util.List; + +public +/** + * @author congtaowang + * @since 2020/10/25 + * + * 自车定位信息 + */ +class LocationResult { + + /** + * sn + */ + public String sn; + + /** + * 最后一个定位点的莫顿码 + */ + public long mortonCode; + + /** + * 最后一个定位点 + */ + public CloudLocationInfo lastCoordinate; + + /** + * 1s 内的连续定位点 + */ + public List< CloudLocationInfo > coordinates; +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/websocket/OnePerSecondSendContent.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/websocket/OnePerSecondSendContent.java new file mode 100644 index 0000000..5ec0a3a --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/websocket/OnePerSecondSendContent.java @@ -0,0 +1,27 @@ +package com.mogo.realtime.websocket; + + +import com.mogo.realtime.entity.ADASRecognizedResult; +import com.mogo.realtime.location.LocationResult; + +import java.util.List; + +public +/** + * @author congtaowang + * @since 2020/10/25 + * + * 一秒一次的上行数据 + */ +class OnePerSecondSendContent { + + /** + * 自车定位点 + */ + public LocationResult self; + + /** + * adas 识别物体:1s 识别到的最后帧 + */ + public List adas; +} From 787ca69217e961a91e9ca6019ad9ec34102d3bb3 Mon Sep 17 00:00:00 2001 From: liujing Date: Thu, 21 Jan 2021 11:34:55 +0800 Subject: [PATCH 07/28] =?UTF-8?q?[add]=20SnapshotUploadInTime=20=E7=B1=BB?= =?UTF-8?q?=20=20=E7=BC=BA=E5=B0=91=E5=A4=96=E9=83=A8=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/mogo-realtime/build.gradle | 1 + .../InterfaceManager/RealTimeApisHandler.java | 31 +++++++++++ .../InterfaceManager/RealTimeServiceApis.java | 15 ++++++ .../RecognizedResultProvider.java | 19 +++++++ .../constant/SnapshotUploadInTime.java | 53 +++++++++++-------- 5 files changed, 97 insertions(+), 22 deletions(-) create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/InterfaceManager/RealTimeApisHandler.java create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/InterfaceManager/RealTimeServiceApis.java create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/InterfaceManager/RecognizedResultProvider.java diff --git a/modules/mogo-realtime/build.gradle b/modules/mogo-realtime/build.gradle index ccea2ad..deb46de 100644 --- a/modules/mogo-realtime/build.gradle +++ b/modules/mogo-realtime/build.gradle @@ -25,6 +25,7 @@ android { dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation 'androidx.appcompat:appcompat:1.1.0' + implementation project(path: ':foudations:mogo-passport') testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/InterfaceManager/RealTimeApisHandler.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/InterfaceManager/RealTimeApisHandler.java new file mode 100644 index 0000000..d23d0f8 --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/InterfaceManager/RealTimeApisHandler.java @@ -0,0 +1,31 @@ +package com.mogo.realtime.InterfaceManager; + +/** + * @author liujing + * @description 描述 + * @since: 2021/1/21 + */ +public final class RealTimeApisHandler { + private static volatile RealTimeApisHandler sInstance; + private static volatile RealTimeServiceApis sApis; + + public static RealTimeApisHandler getInstance() { + if (sInstance == null) { + synchronized (RealTimeApisHandler.class) { + sInstance = new RealTimeApisHandler(); + } + } + return sInstance; + } + + public RealTimeServiceApis getApis(){ + if (sApis == null){ + synchronized (this){ +// sApis = new RealTimeServiceApis(); + } + } + return sApis; + } + + +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/InterfaceManager/RealTimeServiceApis.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/InterfaceManager/RealTimeServiceApis.java new file mode 100644 index 0000000..b852e33 --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/InterfaceManager/RealTimeServiceApis.java @@ -0,0 +1,15 @@ +package com.mogo.realtime.InterfaceManager; + +import com.mogo.realtime.entity.ADASRecognizedResult; + +import java.util.List; + +/** + * @author liujing + * @description 描述 + * @since: 2021/1/21 + */ +public interface RealTimeServiceApis { + RecognizedResultProvider getRecognizedResultManager(); + +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/InterfaceManager/RecognizedResultProvider.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/InterfaceManager/RecognizedResultProvider.java new file mode 100644 index 0000000..e65657e --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/InterfaceManager/RecognizedResultProvider.java @@ -0,0 +1,19 @@ +package com.mogo.realtime.InterfaceManager; + +import com.mogo.realtime.entity.ADASRecognizedResult; + +import java.util.List; + +/** + * @author liujing + * @description 描述 + * @since: 2021/1/21 + */ +public interface RecognizedResultProvider { + /** + * 获取 adas 识别列表 + * + * @return + */ + List getLastADASRecognizedResult(); +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/constant/SnapshotUploadInTime.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/constant/SnapshotUploadInTime.java index 54026d1..b2ea607 100644 --- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/constant/SnapshotUploadInTime.java +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/constant/SnapshotUploadInTime.java @@ -1,7 +1,11 @@ package com.mogo.realtime.constant; import android.content.Context; +import android.util.Log; +import com.mogo.cloud.passport.MoGoAiCloudClient; +import com.mogo.realtime.InterfaceManager.RealTimeApisHandler; +import com.mogo.realtime.InterfaceManager.RealTimeServiceApis; import com.mogo.realtime.entity.ADASRecognizedResult; import com.mogo.realtime.entity.CloudLocationInfo; import com.mogo.realtime.location.LocationResult; @@ -16,7 +20,7 @@ import java.util.logging.Logger; /** * @author congtaowang * @since 2020/12/14 - * + *

* 实时上报坐标、识别物体 */ public class SnapshotUploadInTime implements MogoRTKLocation.RTKLocationListener { @@ -30,9 +34,9 @@ public class SnapshotUploadInTime implements MogoRTKLocation.RTKLocationListener } public static SnapshotUploadInTime getInstance() { - if ( sInstance == null ) { - synchronized ( SnapshotUploadInTime.class ) { - if ( sInstance == null ) { + if (sInstance == null) { + synchronized (SnapshotUploadInTime.class) { + if (sInstance == null) { sInstance = new SnapshotUploadInTime(); } } @@ -49,9 +53,9 @@ public class SnapshotUploadInTime implements MogoRTKLocation.RTKLocationListener return sInstance; } - public void start( Context context ) { + public void start(Context context) { mContext = context.getApplicationContext(); - MogoRTKLocation.getInstance().registerRTKLocationListener( this ); + MogoRTKLocation.getInstance().registerRTKLocationListener(this); } public void stop() { @@ -60,51 +64,54 @@ public class SnapshotUploadInTime implements MogoRTKLocation.RTKLocationListener } @Override - public void onLocationChanged( List< CloudLocationInfo > cloudLocationInfos ) { - startSendCarLocationAndAdasRecognizedResult2Server( cloudLocationInfos ); + public void onLocationChanged(List cloudLocationInfos) { + startSendCarLocationAndAdasRecognizedResult2Server(cloudLocationInfos); } private CloudLocationInfo mLastInfo; - private void startSendCarLocationAndAdasRecognizedResult2Server( List< CloudLocationInfo > cloudLocationInfo ) { + private void startSendCarLocationAndAdasRecognizedResult2Server(List cloudLocationInfo) { CloudLocationInfo lastInfo = null; // 如果数组内容不为空,就用数组最后一个值 - if ( cloudLocationInfo != null && !cloudLocationInfo.isEmpty() ) { - lastInfo = cloudLocationInfo.get( cloudLocationInfo.size() - 1 ); + if (cloudLocationInfo != null && !cloudLocationInfo.isEmpty()) { + lastInfo = cloudLocationInfo.get(cloudLocationInfo.size() - 1); mLastInfo = lastInfo; } - if ( lastInfo == null ) { + if (lastInfo == null) { lastInfo = mLastInfo; } LocationResult locationResult = null; - if ( lastInfo != null ) { + if (lastInfo != null) { // 定位点预测纠偏 - lastInfo = SimpleLocationCorrectStrategy.getInstance().correct( lastInfo ); + lastInfo = SimpleLocationCorrectStrategy.getInstance().correct(lastInfo); locationResult = new LocationResult(); - if ( lastInfo != null ) { + if (lastInfo != null) { locationResult.lastCoordinate = lastInfo; - locationResult.mortonCode = MortonCode.wrapEncodeMorton( lastInfo.getLon(), lastInfo.getLat() ); + locationResult.mortonCode = MortonCode.wrapEncodeMorton(lastInfo.getLon(), lastInfo.getLat()); } // locationResult.coordinates = new ArrayList<>(); - locationResult.sn = com.mogo.commons.network.Utils.getSn(); + locationResult.sn = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getSn(); // if ( cloudLocationInfo == null ) { // locationResult.coordinates.addAll( new ArrayList<>() ); // } else { // locationResult.coordinates.addAll( cloudLocationInfo ); // } } - List recognizedResults = null;//MarkerServiceHandler.getADASController().getLastADASRecognizedResult();//外显接口返回 + List recognizedResults = RealTimeApisHandler.getInstance().getApis().getRecognizedResultManager().getLastADASRecognizedResult();//外显接口返回 OnePerSecondSendContent content = new OnePerSecondSendContent(); content.self = locationResult; content.adas = recognizedResults; - if ( content.self == null && - ( content.adas == null || content.adas.isEmpty() ) ) { - Logger.d( TAG, "no information 2 sent" ); + if (content.self == null && + (content.adas == null || content.adas.isEmpty())) { + Log.d(TAG, "no information 2 sent"); return; } - + //备注 + /* + 等钟超SocketManagerSDK + * MarkerServiceHandler.getApis().getWebSocketManagerApi( mContext ).sendMsg( content, new IMogoOnWebSocketMessageListener() { @Override public WebSocketMsgType getDownLinkType() { @@ -116,5 +123,7 @@ public class SnapshotUploadInTime implements MogoRTKLocation.RTKLocationListener return WebSocketMsgType.MSG_TYPE_UPLINK_CAR_DATA; } } ); + + */ } } From 7af169e0569477399ca7fdcb03aaac0f54f0b710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Thu, 21 Jan 2021 11:54:54 +0800 Subject: [PATCH 08/28] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86JavaDoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 9 + ApiDoc/allclasses-frame.html | 22 + ApiDoc/allclasses-noframe.html | 22 + .../cloud/passport/IMoGoTokenCallback.html | 238 +++++++ .../cloud/passport/MoGoAiCloudClient.html | 286 ++++++++ .../passport/MoGoAiCloudClientConfig.html | 645 ++++++++++++++++++ .../class-use/IMoGoTokenCallback.html | 148 ++++ .../passport/class-use/MoGoAiCloudClient.html | 155 +++++ .../class-use/MoGoAiCloudClientConfig.html | 164 +++++ .../mogo/cloud/passport/package-frame.html | 26 + .../mogo/cloud/passport/package-summary.html | 166 +++++ .../com/mogo/cloud/passport/package-tree.html | 137 ++++ .../com/mogo/cloud/passport/package-use.html | 153 +++++ ApiDoc/constant-values.html | 123 ++++ ApiDoc/deprecated-list.html | 123 ++++ ApiDoc/help-doc.html | 224 ++++++ ApiDoc/index-files/index-1.html | 128 ++++ ApiDoc/index-files/index-2.html | 162 +++++ ApiDoc/index-files/index-3.html | 142 ++++ ApiDoc/index-files/index-4.html | 136 ++++ ApiDoc/index-files/index-5.html | 130 ++++ ApiDoc/index-files/index-6.html | 128 ++++ ApiDoc/index-files/index-7.html | 158 +++++ ApiDoc/index-files/index-8.html | 128 ++++ ApiDoc/index.html | 73 ++ ApiDoc/overview-tree.html | 141 ++++ ApiDoc/package-list | 1 + ApiDoc/script.js | 30 + ApiDoc/stylesheet.css | 574 ++++++++++++++++ .../cloud/passport/MoGoAiCloudClient.java | 9 +- .../passport/MoGoAiCloudClientConfig.java | 98 +++ 31 files changed, 4676 insertions(+), 3 deletions(-) create mode 100644 ApiDoc/allclasses-frame.html create mode 100644 ApiDoc/allclasses-noframe.html create mode 100644 ApiDoc/com/mogo/cloud/passport/IMoGoTokenCallback.html create mode 100644 ApiDoc/com/mogo/cloud/passport/MoGoAiCloudClient.html create mode 100644 ApiDoc/com/mogo/cloud/passport/MoGoAiCloudClientConfig.html create mode 100644 ApiDoc/com/mogo/cloud/passport/class-use/IMoGoTokenCallback.html create mode 100644 ApiDoc/com/mogo/cloud/passport/class-use/MoGoAiCloudClient.html create mode 100644 ApiDoc/com/mogo/cloud/passport/class-use/MoGoAiCloudClientConfig.html create mode 100644 ApiDoc/com/mogo/cloud/passport/package-frame.html create mode 100644 ApiDoc/com/mogo/cloud/passport/package-summary.html create mode 100644 ApiDoc/com/mogo/cloud/passport/package-tree.html create mode 100644 ApiDoc/com/mogo/cloud/passport/package-use.html create mode 100644 ApiDoc/constant-values.html create mode 100644 ApiDoc/deprecated-list.html create mode 100644 ApiDoc/help-doc.html create mode 100644 ApiDoc/index-files/index-1.html create mode 100644 ApiDoc/index-files/index-2.html create mode 100644 ApiDoc/index-files/index-3.html create mode 100644 ApiDoc/index-files/index-4.html create mode 100644 ApiDoc/index-files/index-5.html create mode 100644 ApiDoc/index-files/index-6.html create mode 100644 ApiDoc/index-files/index-7.html create mode 100644 ApiDoc/index-files/index-8.html create mode 100644 ApiDoc/index.html create mode 100644 ApiDoc/overview-tree.html create mode 100644 ApiDoc/package-list create mode 100644 ApiDoc/script.js create mode 100644 ApiDoc/stylesheet.css diff --git a/.idea/misc.xml b/.idea/misc.xml index 71e2a77..10608e0 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,6 +4,15 @@ + + diff --git a/ApiDoc/allclasses-frame.html b/ApiDoc/allclasses-frame.html new file mode 100644 index 0000000..54da0e9 --- /dev/null +++ b/ApiDoc/allclasses-frame.html @@ -0,0 +1,22 @@ + + + + + + +所有类 (蘑菇AI云平台Doc) + + + + + +

所有类

+ + + diff --git a/ApiDoc/allclasses-noframe.html b/ApiDoc/allclasses-noframe.html new file mode 100644 index 0000000..2a08be5 --- /dev/null +++ b/ApiDoc/allclasses-noframe.html @@ -0,0 +1,22 @@ + + + + + + +所有类 (蘑菇AI云平台Doc) + + + + + +

所有类

+ + + diff --git a/ApiDoc/com/mogo/cloud/passport/IMoGoTokenCallback.html b/ApiDoc/com/mogo/cloud/passport/IMoGoTokenCallback.html new file mode 100644 index 0000000..863b584 --- /dev/null +++ b/ApiDoc/com/mogo/cloud/passport/IMoGoTokenCallback.html @@ -0,0 +1,238 @@ + + + + + + +IMoGoTokenCallback (蘑菇AI云平台Doc) + + + + + + + + + + + + +
+
com.mogo.cloud.passport
+

接口 IMoGoTokenCallback

+
+
+
+
    +
  • +
    +
    +
    public interface IMoGoTokenCallback
    +
    AI 云平台接口中Token的获取回碉
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + +
      所有方法 实例方法 抽象方法 
      限定符和类型方法和说明
      voidonError(int code, + java.lang.String msg) 
      voidonTokenGot(java.lang.String token, + java.lang.String sn) 
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        onTokenGot

        +
        void onTokenGot(java.lang.String token,
        +                java.lang.String sn)
        +
      • +
      + + + +
        +
      • +

        onError

        +
        void onError(int code,
        +             java.lang.String msg)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/ApiDoc/com/mogo/cloud/passport/MoGoAiCloudClient.html b/ApiDoc/com/mogo/cloud/passport/MoGoAiCloudClient.html new file mode 100644 index 0000000..dead68e --- /dev/null +++ b/ApiDoc/com/mogo/cloud/passport/MoGoAiCloudClient.html @@ -0,0 +1,286 @@ + + + + + + +MoGoAiCloudClient (蘑菇AI云平台Doc) + + + + + + + + + + + + +
+
com.mogo.cloud.passport
+

类 MoGoAiCloudClient

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.mogo.cloud.passport.MoGoAiCloudClient
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class MoGoAiCloudClient
    +extends java.lang.Object
    +
    蘑菇AI云平台SDK入口
    +
  • +
+
+
+ +
+
+ +
+
+ + + + + + + diff --git a/ApiDoc/com/mogo/cloud/passport/MoGoAiCloudClientConfig.html b/ApiDoc/com/mogo/cloud/passport/MoGoAiCloudClientConfig.html new file mode 100644 index 0000000..71fe7d3 --- /dev/null +++ b/ApiDoc/com/mogo/cloud/passport/MoGoAiCloudClientConfig.html @@ -0,0 +1,645 @@ + + + + + + +MoGoAiCloudClientConfig (蘑菇AI云平台Doc) + + + + + + + + + + + + +
+
com.mogo.cloud.passport
+

类 MoGoAiCloudClientConfig

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.mogo.cloud.passport.MoGoAiCloudClientConfig
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class MoGoAiCloudClientConfig
    +extends java.lang.Object
    +
    SDK 中的参数
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      方法概要

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      所有方法 实例方法 具体方法 
      限定符和类型方法和说明
      com.mogo.cloud.httpdns.listener.IHttpDnsCurrentLocationgetIHttpDnsCurrentLocation() +
      返回HttpDns的位置信息,必须设置,否则将无法使用网络请求
      +
      longgetLoopCheckDelay() +
      获取HttpDns检查时间间隔
      +
      intgetNetMode() +
      获取当前网络环境
      +
      java.lang.StringgetSn() +
      获取从AI云平台获取的SN
      +
      java.lang.StringgetThirdPartyAppKey() +
      获取AI云平台分配给三方应用的AppKey,需要从AI云平台申请
      +
      java.lang.StringgetThirdPartyDeviceId() +
      获取三方设备唯一ID
      +
      java.lang.StringgetThirdPartySignSecret() +
      获取AI云平台分配给三方应用的签名密钥,需要从AI云平台申请
      +
      java.lang.StringgetToken() +
      获取从AI云平台获取的Token
      +
      booleanisShowDebugLog() +
      是否打印日志
      +
      booleanisThirdLogin() +
      获取是否是第三放应用登录
      +
      voidsetIHttpDnsCurrentLocation(com.mogo.cloud.httpdns.listener.IHttpDnsCurrentLocation IHttpDnsCurrentLocation) +
      返回HttpDns的位置信息,必须设置,否则将无法使用网络请求
      +
      voidsetLoopCheckDelay(long loopCheckDelay) +
      设置HttpDns检查时间间隔
      +
      voidsetNetMode(int sNetMode) +
      设置当前网络环境
      +
      voidsetShowDebugLog(boolean showDebugLog) +
      设置是否打印日志
      +
      voidsetThirdLogin(boolean thirdLogin) +
      设置是否是第三方应用登录
      +
      voidsetThirdPartyAppKey(java.lang.String thirdPartyAppKey) +
      设置AI云平台分配给三方应用的AppKey,需要从AI云平台申请
      +
      voidsetThirdPartyDeviceId(java.lang.String thirdPartyDeviceId) +
      设置三方设备唯一ID
      +
      voidsetThirdPartySignSecret(java.lang.String thirdPartySignSecret) +
      设置AI云平台分配给三方应用的签名密钥,需要从AI云平台申请
      +
      java.lang.StringtoString() 
      +
        +
      • + + +

        从类继承的方法 java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      构造器详细资料

      + + + +
        +
      • +

        MoGoAiCloudClientConfig

        +
        public MoGoAiCloudClientConfig()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      方法详细资料

      + + + +
        +
      • +

        getThirdPartyDeviceId

        +
        public java.lang.String getThirdPartyDeviceId()
        +
        获取三方设备唯一ID
        +
        +
        返回:
        +
        三方设备唯一ID
        +
        +
      • +
      + + + +
        +
      • +

        setThirdPartyDeviceId

        +
        public void setThirdPartyDeviceId(java.lang.String thirdPartyDeviceId)
        +
        设置三方设备唯一ID
        +
        +
        参数:
        +
        thirdPartyDeviceId - 三方设备唯一ID
        +
        +
      • +
      + + + +
        +
      • +

        getThirdPartyAppKey

        +
        public java.lang.String getThirdPartyAppKey()
        +
        获取AI云平台分配给三方应用的AppKey,需要从AI云平台申请
        +
        +
        返回:
        +
        AppKey
        +
        +
      • +
      + + + +
        +
      • +

        setThirdPartyAppKey

        +
        public void setThirdPartyAppKey(java.lang.String thirdPartyAppKey)
        +
        设置AI云平台分配给三方应用的AppKey,需要从AI云平台申请
        +
        +
        参数:
        +
        thirdPartyAppKey - AppKey
        +
        +
      • +
      + + + +
        +
      • +

        getThirdPartySignSecret

        +
        public java.lang.String getThirdPartySignSecret()
        +
        获取AI云平台分配给三方应用的签名密钥,需要从AI云平台申请
        +
        +
        返回:
        +
        签名密钥
        +
        +
      • +
      + + + +
        +
      • +

        setThirdPartySignSecret

        +
        public void setThirdPartySignSecret(java.lang.String thirdPartySignSecret)
        +
        设置AI云平台分配给三方应用的签名密钥,需要从AI云平台申请
        +
        +
        参数:
        +
        thirdPartySignSecret - 签名密钥
        +
        +
      • +
      + + + +
        +
      • +

        isThirdLogin

        +
        public boolean isThirdLogin()
        +
        获取是否是第三放应用登录
        +
        +
        返回:
        +
        true-是,false-否
        +
        +
      • +
      + + + +
        +
      • +

        setThirdLogin

        +
        public void setThirdLogin(boolean thirdLogin)
        +
        设置是否是第三方应用登录
        +
        +
        参数:
        +
        thirdLogin - true-是,false-否
        +
        +
      • +
      + + + +
        +
      • +

        getNetMode

        +
        public int getNetMode()
        +
        获取当前网络环境
        +
        +
        返回:
        +
        当前的网络环境是那个
        +
        另请参阅:
        +
        研发环境, +测试环境, +演示环境, +线上环境
        +
        +
      • +
      + + + +
        +
      • +

        setNetMode

        +
        public void setNetMode(int sNetMode)
        +
        设置当前网络环境
        +
        +
        参数:
        +
        sNetMode - 当前的网络环境
        +
        另请参阅:
        +
        MogoHttpDnsConfig.HTTP_DNS_ENV_DEV, +MogoHttpDnsConfig.HTTP_DNS_ENV_QA, +MogoHttpDnsConfig.HTTP_DNS_ENV_DEMO, +MogoHttpDnsConfig.HTTP_DNS_ENV_RELEASE
        +
        +
      • +
      + + + +
        +
      • +

        getToken

        +
        public java.lang.String getToken()
        +
        获取从AI云平台获取的Token
        +
        +
        返回:
        +
        Token信息
        +
        +
      • +
      + + + +
        +
      • +

        getSn

        +
        public java.lang.String getSn()
        +
        获取从AI云平台获取的SN
        +
        +
        返回:
        +
        SN信息
        +
        +
      • +
      + + + +
        +
      • +

        isShowDebugLog

        +
        public boolean isShowDebugLog()
        +
        是否打印日志
        +
        +
        返回:
        +
        true-打印日志,false-不打印日志
        +
        +
      • +
      + + + +
        +
      • +

        setShowDebugLog

        +
        public void setShowDebugLog(boolean showDebugLog)
        +
        设置是否打印日志
        +
        +
        参数:
        +
        showDebugLog - true-打印日志,false-不打印日志
        +
        +
      • +
      + + + +
        +
      • +

        getLoopCheckDelay

        +
        public long getLoopCheckDelay()
        +
        获取HttpDns检查时间间隔
        +
        +
        返回:
        +
        时间间隔,毫秒
        +
        +
      • +
      + + + +
        +
      • +

        setLoopCheckDelay

        +
        public void setLoopCheckDelay(long loopCheckDelay)
        +
        设置HttpDns检查时间间隔
        +
        +
        参数:
        +
        loopCheckDelay - 时间间隔,毫秒
        +
        +
      • +
      + + + +
        +
      • +

        getIHttpDnsCurrentLocation

        +
        public com.mogo.cloud.httpdns.listener.IHttpDnsCurrentLocation getIHttpDnsCurrentLocation()
        +
        返回HttpDns的位置信息,必须设置,否则将无法使用网络请求
        +
        +
        返回:
        +
        返回位置信息的回调
        +
        +
      • +
      + + + +
        +
      • +

        setIHttpDnsCurrentLocation

        +
        public void setIHttpDnsCurrentLocation(com.mogo.cloud.httpdns.listener.IHttpDnsCurrentLocation IHttpDnsCurrentLocation)
        +
        返回HttpDns的位置信息,必须设置,否则将无法使用网络请求
        +
        +
        参数:
        +
        IHttpDnsCurrentLocation - 返回位置信息的回调
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        +
        覆盖:
        +
        toString 在类中 java.lang.Object
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/ApiDoc/com/mogo/cloud/passport/class-use/IMoGoTokenCallback.html b/ApiDoc/com/mogo/cloud/passport/class-use/IMoGoTokenCallback.html new file mode 100644 index 0000000..66ffb4f --- /dev/null +++ b/ApiDoc/com/mogo/cloud/passport/class-use/IMoGoTokenCallback.html @@ -0,0 +1,148 @@ + + + + + + +接口 com.mogo.cloud.passport.IMoGoTokenCallback的使用 (蘑菇AI云平台Doc) + + + + + + + + + + + +
+

接口的使用
com.mogo.cloud.passport.IMoGoTokenCallback

+
+
+ +
+ + + + + + diff --git a/ApiDoc/com/mogo/cloud/passport/class-use/MoGoAiCloudClient.html b/ApiDoc/com/mogo/cloud/passport/class-use/MoGoAiCloudClient.html new file mode 100644 index 0000000..176573b --- /dev/null +++ b/ApiDoc/com/mogo/cloud/passport/class-use/MoGoAiCloudClient.html @@ -0,0 +1,155 @@ + + + + + + +类 com.mogo.cloud.passport.MoGoAiCloudClient的使用 (蘑菇AI云平台Doc) + + + + + + + + + + + +
+

类的使用
com.mogo.cloud.passport.MoGoAiCloudClient

+
+
+ +
+ + + + + + diff --git a/ApiDoc/com/mogo/cloud/passport/class-use/MoGoAiCloudClientConfig.html b/ApiDoc/com/mogo/cloud/passport/class-use/MoGoAiCloudClientConfig.html new file mode 100644 index 0000000..9d9cf06 --- /dev/null +++ b/ApiDoc/com/mogo/cloud/passport/class-use/MoGoAiCloudClientConfig.html @@ -0,0 +1,164 @@ + + + + + + +类 com.mogo.cloud.passport.MoGoAiCloudClientConfig的使用 (蘑菇AI云平台Doc) + + + + + + + + + + + +
+

类的使用
com.mogo.cloud.passport.MoGoAiCloudClientConfig

+
+
+ +
+ + + + + + diff --git a/ApiDoc/com/mogo/cloud/passport/package-frame.html b/ApiDoc/com/mogo/cloud/passport/package-frame.html new file mode 100644 index 0000000..98a28f7 --- /dev/null +++ b/ApiDoc/com/mogo/cloud/passport/package-frame.html @@ -0,0 +1,26 @@ + + + + + + +com.mogo.cloud.passport (蘑菇AI云平台Doc) + + + + + +

com.mogo.cloud.passport

+ + + diff --git a/ApiDoc/com/mogo/cloud/passport/package-summary.html b/ApiDoc/com/mogo/cloud/passport/package-summary.html new file mode 100644 index 0000000..282161c --- /dev/null +++ b/ApiDoc/com/mogo/cloud/passport/package-summary.html @@ -0,0 +1,166 @@ + + + + + + +com.mogo.cloud.passport (蘑菇AI云平台Doc) + + + + + + + + + + + +
+

程序包 com.mogo.cloud.passport

+
+
+ +
+ + + + + + diff --git a/ApiDoc/com/mogo/cloud/passport/package-tree.html b/ApiDoc/com/mogo/cloud/passport/package-tree.html new file mode 100644 index 0000000..eb732b2 --- /dev/null +++ b/ApiDoc/com/mogo/cloud/passport/package-tree.html @@ -0,0 +1,137 @@ + + + + + + +com.mogo.cloud.passport 类分层结构 (蘑菇AI云平台Doc) + + + + + + + + + + + +
+

程序包com.mogo.cloud.passport的分层结构

+
+
+

类分层结构

+ +

接口分层结构

+ +
+ + + + + + diff --git a/ApiDoc/com/mogo/cloud/passport/package-use.html b/ApiDoc/com/mogo/cloud/passport/package-use.html new file mode 100644 index 0000000..298ffc8 --- /dev/null +++ b/ApiDoc/com/mogo/cloud/passport/package-use.html @@ -0,0 +1,153 @@ + + + + + + +程序包 com.mogo.cloud.passport的使用 (蘑菇AI云平台Doc) + + + + + + + + + + + +
+

程序包的使用
com.mogo.cloud.passport

+
+
+ +
+ + + + + + diff --git a/ApiDoc/constant-values.html b/ApiDoc/constant-values.html new file mode 100644 index 0000000..dad1db9 --- /dev/null +++ b/ApiDoc/constant-values.html @@ -0,0 +1,123 @@ + + + + + + +常量字段值 (蘑菇AI云平台Doc) + + + + + + + + + + + +
+

常量字段值

+

目录

+
+ + + + + + diff --git a/ApiDoc/deprecated-list.html b/ApiDoc/deprecated-list.html new file mode 100644 index 0000000..9f10d29 --- /dev/null +++ b/ApiDoc/deprecated-list.html @@ -0,0 +1,123 @@ + + + + + + +已过时的列表 (蘑菇AI云平台Doc) + + + + + + + + +
+ + + + + + + +
+ + +
+

已过时的 API

+

目录

+
+ +
+ + + + + + + +
+ + + + diff --git a/ApiDoc/help-doc.html b/ApiDoc/help-doc.html new file mode 100644 index 0000000..327351a --- /dev/null +++ b/ApiDoc/help-doc.html @@ -0,0 +1,224 @@ + + + + + + +API 帮助 (蘑菇AI云平台Doc) + + + + + + + + +
+ + + + + + + +
+ + +
+

此 API 文档的组织方式

+
此 API (应用程序编程接口) 文档包含对应于导航栏中的项目的页面, 如下所述。
+
+
+
    +
  • +

    程序包

    +

    每个程序包都有一个页面, 其中包含它的类和接口的列表及其概要。此页面可以包含六个类别:

    +
      +
    • 接口 (斜体)
    • +
    • +
    • 枚举
    • +
    • 异常错误
    • +
    • 错误
    • +
    • 注释类型
    • +
    +
  • +
  • +

    类/接口

    +

    每个类, 接口, 嵌套类和嵌套接口都有各自的页面。其中每个页面都由三部分 (类/接口说明, 概要表, 以及详细的成员说明) 组成:

    +
      +
    • 类继承图
    • +
    • 直接子类
    • +
    • 所有已知子接口
    • +
    • 所有已知实现类
    • +
    • 类/接口声明
    • +
    • 类/接口说明
    • +
    +
      +
    • 嵌套类概要
    • +
    • 字段概要
    • +
    • 构造器概要
    • +
    • 方法概要
    • +
    +
      +
    • 字段详细资料
    • +
    • 构造器详细资料
    • +
    • 方法详细资料
    • +
    +

    每个概要条目都包含该项目的详细说明的第一句。概要条目按字母顺序排列, 而详细说明则按其在源代码中出现的顺序排列。这样保持了程序员所建立的逻辑分组。

    +
  • +
  • +

    注释类型

    +

    每个注释类型都有各自的页面, 其中包含以下部分:

    +
      +
    • 注释类型声明
    • +
    • 注释类型说明
    • +
    • 必需元素概要
    • +
    • 可选元素概要
    • +
    • 元素详细资料
    • +
    +
  • +
  • +

    枚举

    +

    每个枚举都有各自的页面, 其中包含以下部分:

    +
      +
    • 枚举声明
    • +
    • 枚举说明
    • +
    • 枚举常量概要
    • +
    • 枚举常量详细资料
    • +
    +
  • +
  • +

    使用

    +

    每个已文档化的程序包, 类和接口都有各自的“使用”页面。此页面介绍了使用给定类或程序包的任何部分的程序包, 类, 方法, 构造器和字段。对于给定的类或接口 A, 其“使用”页面包含 A 的子类, 声明为 A 的字段, 返回 A 的方法, 以及带有类型为 A 的参数的方法和构造器。访问此页面的方法是: 首先转至程序包, 类或接口, 然后单击导航栏中的 "使用" 链接。

    +
  • +
  • +

    树 (类分层结构)

    +

    对于所有程序包, 有一个类分层结构页面, 以及每个程序包的分层结构。每个分层结构页面都包含类的列表和接口的列表。从java.lang.Object开始, 按继承结构对类进行排列。接口不从java.lang.Object继承。

    +
      +
    • 查看“概览”页面时, 单击 "树" 将显示所有程序包的分层结构。
    • +
    • 查看特定程序包, 类或接口页面时, 单击 "树" 将仅显示该程序包的分层结构。
    • +
    +
  • +
  • +

    已过时的 API

    +

    已过时的 API 页面列出了所有已过时的 API。一般由于进行了改进并且通常提供了替代的 API, 所以建议不要使用已过时的 API。在将来的实现过程中, 可能会删除已过时的 API。

    +
  • +
  • +

    索引

    +

    索引 包含按字母顺序排列的所有类, 接口, 构造器, 方法和字段的列表。

    +
  • +
  • +

    上一个/下一个

    +

    这些链接使您可以转至下一个或上一个类, 接口, 程序包或相关页面。

    +
  • +
  • +

    框架/无框架

    +

    这些链接用于显示和隐藏 HTML 框架。所有页面均具有有框架和无框架两种显示方式。

    +
  • +
  • +

    所有类

    +

    所有类链接显示所有类和接口 (除了非静态嵌套类型)。

    +
  • +
  • +

    序列化表格

    +

    每个可序列化或可外部化的类都有其序列化字段和方法的说明。此信息对重新实现者有用, 而对使用 API 的开发者则没有什么用处。尽管导航栏中没有链接, 但您可以通过下列方式获取此信息: 转至任何序列化类, 然后单击类说明的 "另请参阅" 部分中的 "序列化表格"。

    +
  • +
  • +

    常量字段值

    +

    常量字段值页面列出了静态最终字段及其值。

    +
  • +
+此帮助文件适用于使用标准 doclet 生成的 API 文档。
+ +
+ + + + + + + +
+ + + + diff --git a/ApiDoc/index-files/index-1.html b/ApiDoc/index-files/index-1.html new file mode 100644 index 0000000..6a2f1a3 --- /dev/null +++ b/ApiDoc/index-files/index-1.html @@ -0,0 +1,128 @@ + + + + + + +C - 索引 (蘑菇AI云平台Doc) + + + + + + + + +
+ + + + + + + +
+ + +
C G I M O R S T  + + +

C

+
+
com.mogo.cloud.passport - 程序包 com.mogo.cloud.passport
+
 
+
+C G I M O R S T 
+ +
+ + + + + + + +
+ + + + diff --git a/ApiDoc/index-files/index-2.html b/ApiDoc/index-files/index-2.html new file mode 100644 index 0000000..a6b5bc7 --- /dev/null +++ b/ApiDoc/index-files/index-2.html @@ -0,0 +1,162 @@ + + + + + + +G - 索引 (蘑菇AI云平台Doc) + + + + + + + + +
+ + + + + + + +
+ + +
C G I M O R S T  + + +

G

+
+
getAiCloudClientConfig() - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClient
+
 
+
getIHttpDnsCurrentLocation() - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
返回HttpDns的位置信息,必须设置,否则将无法使用网络请求
+
+
getInstance() - 类 中的静态方法com.mogo.cloud.passport.MoGoAiCloudClient
+
 
+
getLoopCheckDelay() - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
获取HttpDns检查时间间隔
+
+
getNetMode() - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
获取当前网络环境
+
+
getSn() - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
获取从AI云平台获取的SN
+
+
getThirdPartyAppKey() - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
获取AI云平台分配给三方应用的AppKey,需要从AI云平台申请
+
+
getThirdPartyDeviceId() - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
获取三方设备唯一ID
+
+
getThirdPartySignSecret() - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
获取AI云平台分配给三方应用的签名密钥,需要从AI云平台申请
+
+
getToken() - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
获取从AI云平台获取的Token
+
+
+C G I M O R S T 
+ +
+ + + + + + + +
+ + + + diff --git a/ApiDoc/index-files/index-3.html b/ApiDoc/index-files/index-3.html new file mode 100644 index 0000000..366c01c --- /dev/null +++ b/ApiDoc/index-files/index-3.html @@ -0,0 +1,142 @@ + + + + + + +I - 索引 (蘑菇AI云平台Doc) + + + + + + + + +
+ + + + + + + +
+ + +
C G I M O R S T  + + +

I

+
+
IMoGoTokenCallback - com.mogo.cloud.passport中的接口
+
+
AI 云平台接口中Token的获取回碉
+
+
init(Context, MoGoAiCloudClientConfig) - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClient
+
+
初始化
+
+
isShowDebugLog() - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
是否打印日志
+
+
isThirdLogin() - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
获取是否是第三放应用登录
+
+
+C G I M O R S T 
+ +
+ + + + + + + +
+ + + + diff --git a/ApiDoc/index-files/index-4.html b/ApiDoc/index-files/index-4.html new file mode 100644 index 0000000..f5ebeec --- /dev/null +++ b/ApiDoc/index-files/index-4.html @@ -0,0 +1,136 @@ + + + + + + +M - 索引 (蘑菇AI云平台Doc) + + + + + + + + +
+ + + + + + + +
+ + +
C G I M O R S T  + + +

M

+
+
MoGoAiCloudClient - com.mogo.cloud.passport中的类
+
+
蘑菇AI云平台SDK入口
+
+
MoGoAiCloudClientConfig - com.mogo.cloud.passport中的类
+
+
SDK 中的参数
+
+
MoGoAiCloudClientConfig() - 类 的构造器com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
 
+
+C G I M O R S T 
+ +
+ + + + + + + +
+ + + + diff --git a/ApiDoc/index-files/index-5.html b/ApiDoc/index-files/index-5.html new file mode 100644 index 0000000..0f09057 --- /dev/null +++ b/ApiDoc/index-files/index-5.html @@ -0,0 +1,130 @@ + + + + + + +O - 索引 (蘑菇AI云平台Doc) + + + + + + + + +
+ + + + + + + +
+ + +
C G I M O R S T  + + +

O

+
+
onError(int, String) - 接口 中的方法com.mogo.cloud.passport.IMoGoTokenCallback
+
 
+
onTokenGot(String, String) - 接口 中的方法com.mogo.cloud.passport.IMoGoTokenCallback
+
 
+
+C G I M O R S T 
+ +
+ + + + + + + +
+ + + + diff --git a/ApiDoc/index-files/index-6.html b/ApiDoc/index-files/index-6.html new file mode 100644 index 0000000..815f47f --- /dev/null +++ b/ApiDoc/index-files/index-6.html @@ -0,0 +1,128 @@ + + + + + + +R - 索引 (蘑菇AI云平台Doc) + + + + + + + + +
+ + + + + + + +
+ + +
C G I M O R S T  + + +

R

+
+
refreshToken(IMoGoTokenCallback) - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClient
+
 
+
+C G I M O R S T 
+ +
+ + + + + + + +
+ + + + diff --git a/ApiDoc/index-files/index-7.html b/ApiDoc/index-files/index-7.html new file mode 100644 index 0000000..55108df --- /dev/null +++ b/ApiDoc/index-files/index-7.html @@ -0,0 +1,158 @@ + + + + + + +S - 索引 (蘑菇AI云平台Doc) + + + + + + + + +
+ + + + + + + +
+ + +
C G I M O R S T  + + +

S

+
+
setIHttpDnsCurrentLocation(IHttpDnsCurrentLocation) - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
返回HttpDns的位置信息,必须设置,否则将无法使用网络请求
+
+
setLoopCheckDelay(long) - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
设置HttpDns检查时间间隔
+
+
setNetMode(int) - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
设置当前网络环境
+
+
setShowDebugLog(boolean) - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
设置是否打印日志
+
+
setThirdLogin(boolean) - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
设置是否是第三方应用登录
+
+
setThirdPartyAppKey(String) - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
设置AI云平台分配给三方应用的AppKey,需要从AI云平台申请
+
+
setThirdPartyDeviceId(String) - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
设置三方设备唯一ID
+
+
setThirdPartySignSecret(String) - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
+
设置AI云平台分配给三方应用的签名密钥,需要从AI云平台申请
+
+
+C G I M O R S T 
+ +
+ + + + + + + +
+ + + + diff --git a/ApiDoc/index-files/index-8.html b/ApiDoc/index-files/index-8.html new file mode 100644 index 0000000..2725012 --- /dev/null +++ b/ApiDoc/index-files/index-8.html @@ -0,0 +1,128 @@ + + + + + + +T - 索引 (蘑菇AI云平台Doc) + + + + + + + + +
+ + + + + + + +
+ + +
C G I M O R S T  + + +

T

+
+
toString() - 类 中的方法com.mogo.cloud.passport.MoGoAiCloudClientConfig
+
 
+
+C G I M O R S T 
+ +
+ + + + + + + +
+ + + + diff --git a/ApiDoc/index.html b/ApiDoc/index.html new file mode 100644 index 0000000..50c5a40 --- /dev/null +++ b/ApiDoc/index.html @@ -0,0 +1,73 @@ + + + + + + +蘑菇AI云平台Doc + + + + + + +<noscript> +<div>您的浏览器已禁用 JavaScript。</div> +</noscript> +<h2>框架预警</h2> +<p>请使用框架功能查看此文档。如果看到此消息, 则表明您使用的是不支持框架的 Web 客户机。链接到<a href="com/mogo/cloud/passport/package-summary.html">非框架版本</a>。</p> + + + diff --git a/ApiDoc/overview-tree.html b/ApiDoc/overview-tree.html new file mode 100644 index 0000000..cf4256e --- /dev/null +++ b/ApiDoc/overview-tree.html @@ -0,0 +1,141 @@ + + + + + + +类分层结构 (蘑菇AI云平台Doc) + + + + + + + + + + + +
+

所有程序包的分层结构

+程序包分层结构: + +
+
+

类分层结构

+ +

接口分层结构

+ +
+ + + + + + diff --git a/ApiDoc/package-list b/ApiDoc/package-list new file mode 100644 index 0000000..762d7bc --- /dev/null +++ b/ApiDoc/package-list @@ -0,0 +1 @@ +com.mogo.cloud.passport diff --git a/ApiDoc/script.js b/ApiDoc/script.js new file mode 100644 index 0000000..b346356 --- /dev/null +++ b/ApiDoc/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/ApiDoc/stylesheet.css b/ApiDoc/stylesheet.css new file mode 100644 index 0000000..98055b2 --- /dev/null +++ b/ApiDoc/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.useSummary td.colFirst, .useSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} diff --git a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java index 07f2f5e..d0c64ad 100644 --- a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java +++ b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java @@ -13,7 +13,7 @@ import com.zhidao.tcloginsdk.model.TokenData; import com.zhidao.tcloginsdk.network.LoginCallback; /** - * 蘑菇AI云平台配置文件 + * 蘑菇AI云平台SDK入口 */ @Keep public class MoGoAiCloudClient { @@ -45,7 +45,7 @@ public class MoGoAiCloudClient { * 初始化 * * @param context 上下文 - * @param aiCloudClientConfig 配置信息 + * @param aiCloudClientConfig SDK配置信息 */ public MoGoAiCloudClient init(Context context, MoGoAiCloudClientConfig aiCloudClientConfig @@ -119,7 +119,10 @@ public class MoGoAiCloudClient { mAiCloudClientConfig.isThirdLogin(), thirdLoginParam, loginCallback); } else { - Log.e(TAG, "SDK MoGoAiCloudClientConfig 为 null,请检查!"); + Log.e(TAG, "═════════════════════════════════════"); + Log.e(TAG, "║ MoGo 鉴权失败 "); + Log.e(TAG, "║ 请配置 MoGoAiCloudClientConfig 信息"); + Log.e(TAG, "═════════════════════════════════════"); } } diff --git a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClientConfig.java b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClientConfig.java index cf5c09e..cf67ca3 100644 --- a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClientConfig.java +++ b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClientConfig.java @@ -61,46 +61,109 @@ public class MoGoAiCloudClientConfig { */ private IHttpDnsCurrentLocation mIHttpDnsCurrentLocation; + /** + * 获取三方设备唯一ID + * + * @return 三方设备唯一ID + */ public String getThirdPartyDeviceId() { return thirdPartyDeviceId; } + /** + * 设置三方设备唯一ID + * + * @param thirdPartyDeviceId 三方设备唯一ID + */ public void setThirdPartyDeviceId(String thirdPartyDeviceId) { this.thirdPartyDeviceId = thirdPartyDeviceId; } + /** + * 获取AI云平台分配给三方应用的AppKey,需要从AI云平台申请 + * + * @return AppKey + */ public String getThirdPartyAppKey() { return thirdPartyAppKey; } + /** + * 设置AI云平台分配给三方应用的AppKey,需要从AI云平台申请 + * + * @param thirdPartyAppKey AppKey + */ public void setThirdPartyAppKey(String thirdPartyAppKey) { this.thirdPartyAppKey = thirdPartyAppKey; } + /** + * 获取AI云平台分配给三方应用的签名密钥,需要从AI云平台申请 + * + * @return 签名密钥 + */ public String getThirdPartySignSecret() { return thirdPartySignSecret; } + /** + * 设置AI云平台分配给三方应用的签名密钥,需要从AI云平台申请 + * + * @param thirdPartySignSecret 签名密钥 + */ public void setThirdPartySignSecret(String thirdPartySignSecret) { this.thirdPartySignSecret = thirdPartySignSecret; } + /** + * 获取是否是第三放应用登录 + * + * @return true-是,false-否 + */ public boolean isThirdLogin() { return thirdLogin; } + /** + * 设置是否是第三方应用登录 + * + * @param thirdLogin true-是,false-否 + */ public void setThirdLogin(boolean thirdLogin) { this.thirdLogin = thirdLogin; } + /** + * 获取当前网络环境 + * + * @return 当前的网络环境是那个 + * @see MogoHttpDnsConfig#HTTP_DNS_ENV_DEV 研发环境 + * @see MogoHttpDnsConfig#HTTP_DNS_ENV_QA 测试环境 + * @see MogoHttpDnsConfig#HTTP_DNS_ENV_DEMO 演示环境 + * @see MogoHttpDnsConfig#HTTP_DNS_ENV_RELEASE 线上环境 + */ public int getNetMode() { return sNetMode; } + /** + * 设置当前网络环境 + * + * @param sNetMode 当前的网络环境 + * @see MogoHttpDnsConfig#HTTP_DNS_ENV_DEV + * @see MogoHttpDnsConfig#HTTP_DNS_ENV_QA + * @see MogoHttpDnsConfig#HTTP_DNS_ENV_DEMO + * @see MogoHttpDnsConfig#HTTP_DNS_ENV_RELEASE + */ public void setNetMode(int sNetMode) { this.sNetMode = sNetMode; } + /** + * 获取从AI云平台获取的Token + * + * @return Token信息 + */ public String getToken() { if (TextUtils.isEmpty(token)) { Logger.e(TAG, "Token 获取失败……"); @@ -108,6 +171,11 @@ public class MoGoAiCloudClientConfig { return token; } + /** + * 获取从AI云平台获取的SN + * + * @return SN信息 + */ public String getSn() { if (TextUtils.isEmpty(sn)) { Logger.e(TAG, "SN 获取失败……"); @@ -115,26 +183,56 @@ public class MoGoAiCloudClientConfig { return sn; } + /** + * 是否打印日志 + * + * @return true-打印日志,false-不打印日志 + */ public boolean isShowDebugLog() { return isShowDebugLog; } + /** + * 设置是否打印日志 + * + * @param showDebugLog true-打印日志,false-不打印日志 + */ public void setShowDebugLog(boolean showDebugLog) { isShowDebugLog = showDebugLog; } + /** + * 获取HttpDns检查时间间隔 + * + * @return 时间间隔,毫秒 + */ public long getLoopCheckDelay() { return mLoopCheckDelay; } + /** + * 设置HttpDns检查时间间隔 + * + * @param loopCheckDelay 时间间隔,毫秒 + */ public void setLoopCheckDelay(long loopCheckDelay) { mLoopCheckDelay = loopCheckDelay; } + /** + * 返回HttpDns的位置信息,必须设置,否则将无法使用网络请求 + * + * @return 返回位置信息的回调 + */ public IHttpDnsCurrentLocation getIHttpDnsCurrentLocation() { return mIHttpDnsCurrentLocation; } + /** + * 返回HttpDns的位置信息,必须设置,否则将无法使用网络请求 + * + * @param IHttpDnsCurrentLocation 返回位置信息的回调 + */ public void setIHttpDnsCurrentLocation(IHttpDnsCurrentLocation IHttpDnsCurrentLocation) { mIHttpDnsCurrentLocation = IHttpDnsCurrentLocation; } From f25b0b33a8e5fbe385489161a8527883f7c3b691 Mon Sep 17 00:00:00 2001 From: wujifei Date: Thu, 21 Jan 2021 13:29:40 +0800 Subject: [PATCH 09/28] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 3 +- app/src/main/AndroidManifest.xml | 8 + .../com/mogo/cloud/network/ApiService.java | 22 + .../java/com/mogo/cloud/network/BaseData.java | 12 + .../mogo/cloud/network/NetworkActivity.java | 83 +++ .../mogo/cloud/network/V2XRoadDataRes.java | 535 ++++++++++++++++++ app/src/main/res/layout/activity_network.xml | 19 + .../interceptor/HeaderNetworkInterceptor.kt | 1 - 8 files changed, 681 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/mogo/cloud/network/ApiService.java create mode 100644 app/src/main/java/com/mogo/cloud/network/BaseData.java create mode 100644 app/src/main/java/com/mogo/cloud/network/NetworkActivity.java create mode 100644 app/src/main/java/com/mogo/cloud/network/V2XRoadDataRes.java create mode 100644 app/src/main/res/layout/activity_network.xml diff --git a/app/build.gradle b/app/build.gradle index b71e1a2..03bc2e5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -37,5 +37,6 @@ dependencies { implementation project(path: ':foudations:mogo-passport') implementation project(path: ':foudations:mogo-commons') // implementation 'com.mogo.cloud:passport:1.0.0' - + implementation rootProject.ext.dependencies.rxjava + implementation rootProject.ext.dependencies.rxandroid } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b7affc2..87e7c81 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,6 +20,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/mogo/cloud/network/ApiService.java b/app/src/main/java/com/mogo/cloud/network/ApiService.java new file mode 100644 index 0000000..03fa1ff --- /dev/null +++ b/app/src/main/java/com/mogo/cloud/network/ApiService.java @@ -0,0 +1,22 @@ +package com.mogo.cloud.network; + +import com.mogo.cloud.network.V2XRoadDataRes; + +import java.util.Map; + +import io.reactivex.Observable; +import retrofit2.http.GET; +import retrofit2.http.QueryMap; + +/** + * created by wujifei on 2021/1/21 13:02 + * describe: + */ +public interface ApiService { + + /** + * 基于目的地预判的道路事件和违章高发情况的停车推荐 + */ + @GET("/yycp-geo-fence-carService/car/road/getRoadDataOfVehiclesRecommend") + Observable queryRoadDataOfVehiclesRecommend(@QueryMap Map parameters); +} diff --git a/app/src/main/java/com/mogo/cloud/network/BaseData.java b/app/src/main/java/com/mogo/cloud/network/BaseData.java new file mode 100644 index 0000000..ef14fd4 --- /dev/null +++ b/app/src/main/java/com/mogo/cloud/network/BaseData.java @@ -0,0 +1,12 @@ +package com.mogo.cloud.network; + +import java.io.Serializable; + +/** + * Created by congtaowang on 2019/1/7. + */ +public class BaseData implements Serializable, Cloneable { + + public int code = -1; + public String msg; +} diff --git a/app/src/main/java/com/mogo/cloud/network/NetworkActivity.java b/app/src/main/java/com/mogo/cloud/network/NetworkActivity.java new file mode 100644 index 0000000..38de9b3 --- /dev/null +++ b/app/src/main/java/com/mogo/cloud/network/NetworkActivity.java @@ -0,0 +1,83 @@ +package com.mogo.cloud.network; + +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.google.gson.Gson; +import com.mogo.cloud.R; +import com.mogo.utils.network.RetrofitFactory; + +import java.util.HashMap; +import java.util.Map; + +import io.reactivex.Observer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; + +/** + * created by wujifei on 2021/1/21 12:26 + * describe: + */ +public class NetworkActivity extends AppCompatActivity { + private Button btn; + private TextView tvResult; + + + private ApiService apiService; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_network); + btn = (Button) findViewById(R.id.btn); + tvResult = (TextView) findViewById(R.id.tv_result); + apiService = RetrofitFactory.getInstance("http://dzt-test.zhidaozhixing.com") + .create(ApiService.class); + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + tvResult.setText("结果显示"); + queryRoadData("ZD802C1938L10797"); + } + }); + } + + public void queryRoadData(String sn) { + if (apiService != null) { + Map map = new HashMap<>(); + map.put("sn", sn); + apiService.queryRoadDataOfVehiclesRecommend(map) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(V2XRoadDataRes value) { + tvResult.setText(new Gson().toJson(value)); + System.out.println(new Gson().toJson(value)); + } + + @Override + public void onError(Throwable e) { + tvResult.setText(e.toString()); + System.out.println(e); + } + + @Override + public void onComplete() { + + } + }); + } + } +} diff --git a/app/src/main/java/com/mogo/cloud/network/V2XRoadDataRes.java b/app/src/main/java/com/mogo/cloud/network/V2XRoadDataRes.java new file mode 100644 index 0000000..1f9ea39 --- /dev/null +++ b/app/src/main/java/com/mogo/cloud/network/V2XRoadDataRes.java @@ -0,0 +1,535 @@ +package com.mogo.cloud.network; + + + +import java.util.List; + +/** + * created by wujifei on 2020/12/24 11:05 + * describe:于目的地预判的道路事件和违章高发情况的停车推荐 返回数据 + */ +public class V2XRoadDataRes extends BaseData { + + private String detailMsg; + private ResultDTO result; + + public String getDetailMsg() { + return detailMsg; + } + + public void setDetailMsg(String detailMsg) { + this.detailMsg = detailMsg; + } + + public ResultDTO getResult() { + return result; + } + + public void setResult(ResultDTO result) { + this.result = result; + } + + public static class ResultDTO { + private String formatAddress; + private List fromPoint; + private List topPoint; + private List poiData; + private List illegalParkingData; + + public String getFormatAddress() { + return formatAddress; + } + + public void setFormatAddress(String formatAddress) { + this.formatAddress = formatAddress; + } + + public List getFromPoint() { + return fromPoint; + } + + public void setFromPoint(List fromPoint) { + this.fromPoint = fromPoint; + } + + public List getTopPoint() { + return topPoint; + } + + public void setTopPoint(List topPoint) { + this.topPoint = topPoint; + } + + public List getPoiData() { + return poiData; + } + + public void setPoiData(List poiData) { + this.poiData = poiData; + } + + public List getIllegalParkingData() { + return illegalParkingData; + } + + public void setIllegalParkingData(List illegalParkingData) { + this.illegalParkingData = illegalParkingData; + } + + public static class PoiDataDTO { + /** + * generateTime : 1607061691000 + * type : 0 + * lat : 39.988346 + * lon : 116.410857 + * direction : 333 + * items : [{"url":"http://petchfile-1255510688.cos.ap-beijing.myqcloud.com/sso-server-image/1603181678357.png?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDCWfcNwD5PXVWLxwejccR3Tiz5zhIkx0T%26q-sign-time%3D1607393278%3B1607400478%26q-key-time%3D1607393278%3B1607400478%26q-header-list%3D%26q-url-param-list%3D%26q-signature%3D78c0f738f4dae37e67c235561c78120b86433a04"}] + * cityName : + * distance : 21447 + * nickName : 独狼 + * headImgUrl : https://yycp-static-1255510688.cos.ap-beijing.myqcloud.com/defaultUserHeadImg/VN000015.jpg + * sn : + * userId : 0 + * trafficInfoType : 0 + * infoId : 784423898000445440 + * poiType : 10015 + * uploadType : 2 + * likeNum : 3 + * systemLikeNum : 3 + * fabulous : false + */ + + + private long generateTime; + + private int type; + private double lat; + private double lon; + + private int direction; + private String cityName; + + private int distance; + private String nickName; + + private String headImgUrl; + + private String sn; + + private long userId; + + private String trafficInfoType; + + private String infoId; + + private String poiType; + + private String uploadType; + + private int likeNum; + + private int systemLikeNum; + + private boolean fabulous; + + private List items; + + public long getGenerateTime() { + return generateTime; + } + + public void setGenerateTime(long generateTime) { + this.generateTime = generateTime; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLon() { + return lon; + } + + public void setLon(double lon) { + this.lon = lon; + } + + public int getDirection() { + return direction; + } + + public void setDirection(int direction) { + this.direction = direction; + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public int getDistance() { + return distance; + } + + public void setDistance(int distance) { + this.distance = distance; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getHeadImgUrl() { + return headImgUrl; + } + + public void setHeadImgUrl(String headImgUrl) { + this.headImgUrl = headImgUrl; + } + + public String getSn() { + return sn; + } + + public void setSn(String sn) { + this.sn = sn; + } + + public long getUserId() { + return userId; + } + + public void setUserId(long userId) { + this.userId = userId; + } + + public String getTrafficInfoType() { + return trafficInfoType; + } + + public void setTrafficInfoType(String trafficInfoType) { + this.trafficInfoType = trafficInfoType; + } + + public String getInfoId() { + return infoId; + } + + public void setInfoId(String infoId) { + this.infoId = infoId; + } + + public String getPoiType() { + return poiType; + } + + public void setPoiType(String poiType) { + this.poiType = poiType; + } + + public String getUploadType() { + return uploadType; + } + + public void setUploadType(String uploadType) { + this.uploadType = uploadType; + } + + public int getLikeNum() { + return likeNum; + } + + public void setLikeNum(int likeNum) { + this.likeNum = likeNum; + } + + public int getSystemLikeNum() { + return systemLikeNum; + } + + public void setSystemLikeNum(int systemLikeNum) { + this.systemLikeNum = systemLikeNum; + } + + public boolean isFabulous() { + return fabulous; + } + + public void setFabulous(boolean fabulous) { + this.fabulous = fabulous; + } + + public List getItems() { + return items; + } + + public void setItems(List items) { + this.items = items; + } + + + public static class ItemsDTO { + /** + * url : http://petchfile-1255510688.cos.ap-beijing.myqcloud.com/sso-server-image/1603181678357.png?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDCWfcNwD5PXVWLxwejccR3Tiz5zhIkx0T%26q-sign-time%3D1607393278%3B1607400478%26q-key-time%3D1607393278%3B1607400478%26q-header-list%3D%26q-url-param-list%3D%26q-signature%3D78c0f738f4dae37e67c235561c78120b86433a04 + */ + + + private String url; + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + } + } + + + public static class IllegalParkingDataDTO { + /** + * generateTime : 1594047156488 + * type : 3 + * lat : 40.028599 + * lon : 116.412712 + * direction : 0 + * addr : 红军营南路红军营南路万科星园北口至红军营南路北苑路口段 + * items : [] + * cityName : + * distance : 6728 + * nickName : + * headImgUrl : + * sn : + * userId : 0 + * trafficInfoType : 0 + * infoId : 686267 + * poiType : 10016 + * uploadType : 3 + * likeNum : 0 + * systemLikeNum : 0 + * fabulous : false + */ + + + private long generateTime; + + private int type; + + private double lat; + + private double lon; + + private int direction; + + private String addr; + + private String cityName; + + private int distance; + + private String nickName; + + private String headImgUrl; + + private String sn; + + private long userId; + + private String trafficInfoType; + + private String infoId; + + private String poiType; + + private String uploadType; + + private int likeNum; + + private int systemLikeNum; + + private boolean fabulous; + + private List items; + + public long getGenerateTime() { + return generateTime; + } + + public void setGenerateTime(long generateTime) { + this.generateTime = generateTime; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLon() { + return lon; + } + + public void setLon(double lon) { + this.lon = lon; + } + + public int getDirection() { + return direction; + } + + public void setDirection(int direction) { + this.direction = direction; + } + + public String getAddr() { + return addr; + } + + public void setAddr(String addr) { + this.addr = addr; + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public int getDistance() { + return distance; + } + + public void setDistance(int distance) { + this.distance = distance; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getHeadImgUrl() { + return headImgUrl; + } + + public void setHeadImgUrl(String headImgUrl) { + this.headImgUrl = headImgUrl; + } + + public String getSn() { + return sn; + } + + public void setSn(String sn) { + this.sn = sn; + } + + public long getUserId() { + return userId; + } + + public void setUserId(long userId) { + this.userId = userId; + } + + public String getTrafficInfoType() { + return trafficInfoType; + } + + public void setTrafficInfoType(String trafficInfoType) { + this.trafficInfoType = trafficInfoType; + } + + public String getInfoId() { + return infoId; + } + + public void setInfoId(String infoId) { + this.infoId = infoId; + } + + public String getPoiType() { + return poiType; + } + + public void setPoiType(String poiType) { + this.poiType = poiType; + } + + public String getUploadType() { + return uploadType; + } + + public void setUploadType(String uploadType) { + this.uploadType = uploadType; + } + + public int getLikeNum() { + return likeNum; + } + + public void setLikeNum(int likeNum) { + this.likeNum = likeNum; + } + + public int getSystemLikeNum() { + return systemLikeNum; + } + + public void setSystemLikeNum(int systemLikeNum) { + this.systemLikeNum = systemLikeNum; + } + + public boolean isFabulous() { + return fabulous; + } + + public void setFabulous(boolean fabulous) { + this.fabulous = fabulous; + } + + public List getItems() { + return items; + } + + public void setItems(List items) { + this.items = items; + } + } + } +} diff --git a/app/src/main/res/layout/activity_network.xml b/app/src/main/res/layout/activity_network.xml new file mode 100644 index 0000000..f9d03b9 --- /dev/null +++ b/app/src/main/res/layout/activity_network.xml @@ -0,0 +1,19 @@ + + + +