fix bug of location to upload socket server
This commit is contained in:
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -13,7 +13,9 @@
|
||||
<map>
|
||||
<entry key="app/src/main/res/layout/activity_live_play_and_push.xml" value="0.1" />
|
||||
<entry key="app/src/main/res/layout/activity_live_push.xml" value="0.3640625" />
|
||||
<entry key="app/src/main/res/layout/activity_location.xml" value="0.36502448356535333" />
|
||||
<entry key="app/src/main/res/layout/activity_main.xml" value="0.3640625" />
|
||||
<entry key="app/src/main/res/layout/activity_real_time.xml" value="0.1609347442680776" />
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
|
||||
@@ -57,10 +57,12 @@ dependencies {
|
||||
implementation 'com.zhidao.carmanager:common:1.0.25@aar'
|
||||
|
||||
if (Boolean.valueOf(RELEASE)) {
|
||||
implementation "com.mogo.cloud:location:${MOGO_LOCATION_VERSION}"
|
||||
implementation "com.mogo.cloud:tanlu:${MOGO_TANLU_VERSION}"
|
||||
implementation "com.mogo.cloud:realtime:${MOGO_REALTIME_VERSION}"
|
||||
implementation "com.mogo.cloud:trafficlive:${MOGO_TRAFFICLIVE_VERSION}"
|
||||
} else {
|
||||
implementation project(":foudations:mogo-location")
|
||||
implementation project(":modules:mogo-tanlu")
|
||||
implementation project(":modules:mogo-realtime")
|
||||
implementation project(":modules:mogo-trafficlive")
|
||||
|
||||
@@ -60,19 +60,23 @@
|
||||
android:name=".RealTimeActivity"
|
||||
android:label="实时数据测试"
|
||||
android:launchMode="singleTask" />
|
||||
<activity
|
||||
android:name=".LocationActivity"
|
||||
android:label="定位数据上报测试"
|
||||
android:launchMode="singleTask" />
|
||||
<activity
|
||||
android:name=".RoadConditionActivity"
|
||||
android:label="路况服务"
|
||||
android:launchMode="singleTask" />
|
||||
|
||||
<!-- <receiver android:name=".wifi.WifiBroadCastReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="android.net.wifi.RSSI_CHANGED" />
|
||||
<action android:name="android.net.wifi.STATE_CHANGE" />
|
||||
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
|
||||
</intent-filter>
|
||||
<!-- <receiver android:name=".wifi.WifiBroadCastReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="android.net.wifi.RSSI_CHANGED" />
|
||||
<action android:name="android.net.wifi.STATE_CHANGE" />
|
||||
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
|
||||
</intent-filter>
|
||||
|
||||
</receiver>-->
|
||||
</receiver>-->
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
69
app/src/main/java/com/mogo/cloud/LocationActivity.java
Normal file
69
app/src/main/java/com/mogo/cloud/LocationActivity.java
Normal file
@@ -0,0 +1,69 @@
|
||||
package com.mogo.cloud;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.widget.Button;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.mogo.cloud.location.LocationManager;
|
||||
import com.mogo.cloud.location.MogoLocationInfoServices;
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
|
||||
import com.mogo.cloud.tanlu.bean.location.MogoLocation;
|
||||
import com.mogo.realtime.socket.SocketHandler;
|
||||
|
||||
/**
|
||||
* @author arrow
|
||||
* @description 描述
|
||||
* @since: 2021/1/21
|
||||
*/
|
||||
public class LocationActivity extends AppCompatActivity {
|
||||
|
||||
private static final String TAG = "LocationActivity";
|
||||
|
||||
private Button snapshotLocStart;
|
||||
private Button snapshotLocStop;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_location);
|
||||
MogoLocationInfoServices.getInstance().init(this);
|
||||
SocketHandler.getInstance().initSocket(this, MoGoAiCloudClientConfig.getInstance().getServiceAppId());
|
||||
|
||||
MogoLocation mogoLocation = new MogoLocation();
|
||||
mogoLocation.setAccuracy(0.0f);
|
||||
mogoLocation.setAdCode("110113");
|
||||
mogoLocation.setCityCode("010");
|
||||
mogoLocation.setAddress("北京测试");
|
||||
mogoLocation.setAltitude(20);
|
||||
mogoLocation.setSpeed(20.0f);
|
||||
mogoLocation.setLocationDetail("北京东城环球贸易中心");
|
||||
mogoLocation.setBearing(185.8831f);
|
||||
mogoLocation.setAltitude(0.0);
|
||||
mogoLocation.setLatitude(40.201138738452414);
|
||||
mogoLocation.setLongitude(116.74181952698365);
|
||||
mogoLocation.setLocType(0);
|
||||
mogoLocation.setGpsAccuracyStatus(0);
|
||||
mogoLocation.setProvider("AGPS");
|
||||
|
||||
snapshotLocStart = findViewById(R.id.snapshotLocStart);
|
||||
snapshotLocStart.setOnClickListener(view -> {
|
||||
MogoLocationInfoServices.getInstance().start();
|
||||
MogoLocationInfoServices.getInstance().provideLocation(mogoLocation);
|
||||
});
|
||||
|
||||
snapshotLocStop = findViewById(R.id.snapshotLocStop);
|
||||
snapshotLocStop.setOnClickListener(view -> {
|
||||
SocketHandler.getInstance().stop();
|
||||
MogoLocationInfoServices.getInstance().stop();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
SocketHandler.getInstance().stop();
|
||||
MogoLocationInfoServices.getInstance().stop();
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
private Button btnJumpConfigInfo;
|
||||
private Button btnJumpNetWorkPort;
|
||||
private Button btnJumpRealTime;
|
||||
private Button btnJumpLocation;
|
||||
private Button btnJumpRoadCondition;
|
||||
private Button btnJumpLivePlayAndPush;
|
||||
private Button btnJumpLivePush;
|
||||
@@ -65,6 +66,12 @@ public class MainActivity extends AppCompatActivity {
|
||||
startActivity(intent);
|
||||
});
|
||||
|
||||
btnJumpLocation = findViewById(R.id.btnJumpLocation);
|
||||
btnJumpLocation.setOnClickListener(v -> {
|
||||
Intent intent = new Intent(MainActivity.this, LocationActivity.class);
|
||||
startActivity(intent);
|
||||
});
|
||||
|
||||
btnJumpRoadCondition = findViewById(R.id.btnJumpRoadcondition);
|
||||
btnJumpRoadCondition.setOnClickListener(v -> {
|
||||
Intent intent = new Intent(MainActivity.this, RoadConditionActivity.class);
|
||||
|
||||
@@ -76,6 +76,7 @@ public class MoGoApplication extends MultiDexApplication {
|
||||
}
|
||||
});
|
||||
|
||||
clientConfig.setUseOriginSocket(true);
|
||||
// 初始化SDK,可以设置状态回调来监听
|
||||
MoGoAiCloudClient.getInstance().init(this, clientConfig);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.mogo.cloud.location;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.Keep;
|
||||
|
||||
import com.mogo.cloud.tanlu.bean.location.MogoLocation;
|
||||
import com.mogo.cloud.utils.logger.Logger;
|
||||
|
||||
@Keep
|
||||
public class MogoLocationInfoServices {
|
||||
|
||||
private static final String TAG = "MogoLocationInfoServices-sdk";
|
||||
|
||||
private static volatile MogoLocationInfoServices sInstance;
|
||||
private MogoLocation mLocation;
|
||||
|
||||
private MogoLocationInfoServices() {
|
||||
}
|
||||
|
||||
@Keep
|
||||
public static MogoLocationInfoServices getInstance() {
|
||||
if (sInstance == null) {
|
||||
synchronized (MogoLocationInfoServices.class) {
|
||||
if (sInstance == null) {
|
||||
sInstance = new MogoLocationInfoServices();
|
||||
}
|
||||
}
|
||||
}
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
public synchronized void release() {
|
||||
sInstance = null;
|
||||
}
|
||||
|
||||
public void provideLocation(MogoLocation location) {
|
||||
mLocation = location;
|
||||
}
|
||||
|
||||
public MogoLocation getLocation() {
|
||||
return mLocation;
|
||||
}
|
||||
|
||||
public void start() {
|
||||
LocationManager.getInstance().start();
|
||||
Logger.d(TAG, "sdk - start");
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
LocationManager.getInstance().stop();
|
||||
Logger.d(TAG, "sdk - stop");
|
||||
}
|
||||
|
||||
public void init(Context context) {
|
||||
LocationManager.getInstance().init(context);
|
||||
Logger.d(TAG, "sdk - init");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
package com.mogo.cloud.location;
|
||||
|
||||
import com.elegant.spi.annotations.Service;
|
||||
import com.mogo.cloud.location.third.core.LocationServiceProvider;
|
||||
|
||||
@Service(value = LocationServiceProvider.class)
|
||||
public class MogoLocationSource extends LocationServiceProvider {
|
||||
|
||||
@Override
|
||||
public float getBearing() {
|
||||
if (MogoLocationInfoServices.getInstance().getLocation() != null) {
|
||||
return MogoLocationInfoServices.getInstance().getLocation().getBearing();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getAccuracy() {
|
||||
if (MogoLocationInfoServices.getInstance().getLocation() != null) {
|
||||
return MogoLocationInfoServices.getInstance().getLocation().getAccuracy();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProvider() {
|
||||
if (MogoLocationInfoServices.getInstance().getLocation() != null) {
|
||||
return MogoLocationInfoServices.getInstance().getLocation().getProvider();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getSpeed() {
|
||||
if (MogoLocationInfoServices.getInstance().getLocation() != null) {
|
||||
return MogoLocationInfoServices.getInstance().getLocation().getSpeed();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getAltitude() {
|
||||
if (MogoLocationInfoServices.getInstance().getLocation() != null) {
|
||||
return MogoLocationInfoServices.getInstance().getLocation().getAltitude();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAdCode() {
|
||||
if (MogoLocationInfoServices.getInstance().getLocation() != null) {
|
||||
return MogoLocationInfoServices.getInstance().getLocation().getAdCode();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLocType() {
|
||||
if (MogoLocationInfoServices.getInstance().getLocation() != null) {
|
||||
return MogoLocationInfoServices.getInstance().getLocation().getLocType();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getLatitude() {
|
||||
if (MogoLocationInfoServices.getInstance().getLocation() != null) {
|
||||
return MogoLocationInfoServices.getInstance().getLocation().getLatitude();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getLongitude() {
|
||||
if (MogoLocationInfoServices.getInstance().getLocation() != null) {
|
||||
return MogoLocationInfoServices.getInstance().getLocation().getLongitude();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getTime() {
|
||||
if (MogoLocationInfoServices.getInstance().getLocation() != null) {
|
||||
return MogoLocationInfoServices.getInstance().getLocation().getTime();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCityCode() {
|
||||
if (MogoLocationInfoServices.getInstance().getLocation() != null) {
|
||||
return MogoLocationInfoServices.getInstance().getLocation().getCityCode();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCityName() {
|
||||
if (MogoLocationInfoServices.getInstance().getLocation() != null) {
|
||||
return MogoLocationInfoServices.getInstance().getLocation().getCityName();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGpsAccuracyStatus() {
|
||||
if (MogoLocationInfoServices.getInstance().getLocation() != null) {
|
||||
return MogoLocationInfoServices.getInstance().getLocation().getGpsAccuracyStatus();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSatellites() {
|
||||
if (MogoLocationInfoServices.getInstance().getLocation() != null) {
|
||||
return MogoLocationInfoServices.getInstance().getLocation().getSatellite();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCarStatus() {
|
||||
// 常开状态
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
23
app/src/main/res/layout/activity_location.xml
Normal file
23
app/src/main/res/layout/activity_location.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
tools:context=".LocationActivity">
|
||||
|
||||
<Button
|
||||
android:id="@+id/snapshotLocStart"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp"
|
||||
android:text="开启定位上传" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/snapshotLocStop"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp"
|
||||
android:text="结束定位上传" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -66,6 +66,12 @@
|
||||
android:layout_height="match_parent"
|
||||
android:text="实时数据测试" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnJumpLocation"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:text="每5秒上报" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnJumpRoadcondition"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -27,14 +27,16 @@ android {
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: "libs", include: ["*.jar"])
|
||||
// 上报位置
|
||||
implementation 'com.zhidao.locupload:loc-upload-sdk:1.1.7'
|
||||
api rootProject.ext.dependencies.spi
|
||||
|
||||
if (Boolean.valueOf(RELEASE)) {
|
||||
implementation "com.mogo.cloud:utils:${MOGO_UTILS_VERSION}"
|
||||
implementation "com.mogo.cloud:passport:${MOGO_PASSPORT_VERSION}"
|
||||
implementation "com.mogo.cloud:socket:${MOGO_SOCKET_VERSION}"
|
||||
} else {
|
||||
implementation project(path: ':foudations:mogo-passport')
|
||||
implementation project(":foudations:mogo-utils")
|
||||
implementation project(":foudations:mogo-passport")
|
||||
implementation project(":foudations:mogo-socket")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,4 +2,9 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.mogo.cloud.location">
|
||||
|
||||
<application>
|
||||
<service
|
||||
android:name=".third.service.UploadDataService"
|
||||
android:enabled="true" />
|
||||
</application>
|
||||
</manifest>
|
||||
@@ -2,17 +2,17 @@ package com.mogo.cloud.location.third;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.mogo.cloud.location.third.core.LocUploadConfig;
|
||||
import com.mogo.cloud.location.third.core.LocUploadManager;
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClient;
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
|
||||
import com.mogo.cloud.utils.logger.Logger;
|
||||
import com.zhidao.locupload.LocUploadConfig;
|
||||
import com.zhidao.locupload.LocUploadManager;
|
||||
|
||||
public class ThirdLocationManager {
|
||||
|
||||
private static final String TAG = "ThirdLocationManager";
|
||||
private static volatile ThirdLocationManager mInstance;
|
||||
private MoGoAiCloudClientConfig cloudClientConfig;
|
||||
private final MoGoAiCloudClientConfig cloudClientConfig;
|
||||
|
||||
private ThirdLocationManager() {
|
||||
cloudClientConfig = MoGoAiCloudClient.getInstance().getAiCloudClientConfig();
|
||||
@@ -33,8 +33,7 @@ public class ThirdLocationManager {
|
||||
LocUploadConfig.instance().
|
||||
setAppId(cloudClientConfig.getServiceAppId()).
|
||||
setContext(context.getApplicationContext()).
|
||||
setLoggable(cloudClientConfig.isShowDebugLog()).
|
||||
setLocInterval(2000L);
|
||||
setLocInterval(1000L);
|
||||
Logger.d(TAG, "location sdk - init");
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
package com.mogo.cloud.location.third.core;
|
||||
|
||||
|
||||
public abstract class AbstractLocation implements ILocation {
|
||||
|
||||
@Override
|
||||
public void setLocType(int locType) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBearing(float bearing) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAccuracy(float accuracy) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setProvider(String provider) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSpeed(float speed) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAltitude(double altitude) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAdCode(String adCode) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLatitude(double latitude) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLongitude(double longitude) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTime(long time) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCityCode(String cityCode) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCityName(String cityName) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGpsAccuracyStatus(int gpsAccuracyStatus) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSatellites(int satellites) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCarStatus(int carStatus) {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package com.mogo.cloud.location.third.core;
|
||||
|
||||
public interface ILocation {
|
||||
|
||||
public float getBearing();
|
||||
|
||||
public void setBearing(float bearing);
|
||||
|
||||
public float getAccuracy();
|
||||
|
||||
public void setAccuracy(float accuracy);
|
||||
|
||||
public String getProvider();
|
||||
|
||||
public void setProvider(String provider);
|
||||
|
||||
public float getSpeed();
|
||||
|
||||
public void setSpeed(float speed);
|
||||
|
||||
public double getAltitude();
|
||||
|
||||
public void setAltitude(double altitude);
|
||||
|
||||
public void setAdCode(String adcode);
|
||||
|
||||
public String getAdCode();
|
||||
|
||||
public int getLocType();
|
||||
|
||||
public void setLocType(int locType);
|
||||
|
||||
public double getLatitude();
|
||||
|
||||
public void setLatitude(double latitude);
|
||||
|
||||
public double getLongitude();
|
||||
|
||||
public void setLongitude(double longitude);
|
||||
|
||||
public long getTime();
|
||||
|
||||
public void setTime(long time);
|
||||
|
||||
public String getCityCode();
|
||||
|
||||
public void setCityCode(String cityCode);
|
||||
|
||||
public String getCityName();
|
||||
|
||||
public void setCityName(String cityName);
|
||||
|
||||
public int getGpsAccuracyStatus();
|
||||
|
||||
public void setGpsAccuracyStatus(int gpsAccuracyStatus);
|
||||
|
||||
public int getSatellites();
|
||||
|
||||
public void setSatellites(int satellites);
|
||||
|
||||
public int getCarStatus();
|
||||
|
||||
public void setCarStatus(int carStatus);
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.mogo.cloud.location.third.core;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
public class LocUploadConfig {
|
||||
|
||||
private Context context;
|
||||
|
||||
private String appId;
|
||||
|
||||
private long locInterval = 1000L;
|
||||
|
||||
public static LocUploadConfig instance() {
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder {
|
||||
private static final LocUploadConfig INSTANCE = new LocUploadConfig();
|
||||
}
|
||||
|
||||
public long getLocInterval() {
|
||||
return locInterval;
|
||||
}
|
||||
|
||||
public LocUploadConfig setLocInterval(long locInterval) {
|
||||
this.locInterval = locInterval;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Context getContext() {
|
||||
return context;
|
||||
}
|
||||
|
||||
public LocUploadConfig setContext(Context context) {
|
||||
this.context = context;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getAppId() {
|
||||
return appId;
|
||||
}
|
||||
|
||||
public LocUploadConfig setAppId(String appId) {
|
||||
this.appId = appId;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.mogo.cloud.location.third.core;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import com.mogo.cloud.location.third.service.UploadDataService;
|
||||
|
||||
public class LocUploadManager {
|
||||
|
||||
private static volatile LocUploadManager mInstance;
|
||||
|
||||
private LocUploadManager() {}
|
||||
|
||||
public static LocUploadManager getInstance() {
|
||||
if (mInstance == null) {
|
||||
synchronized (LocUploadManager.class) {
|
||||
if (mInstance == null) {
|
||||
mInstance = new LocUploadManager();
|
||||
}
|
||||
}
|
||||
}
|
||||
return mInstance;
|
||||
}
|
||||
|
||||
public void startUpload() {
|
||||
LocationDelegateManager.getInstance().loadDelegates();
|
||||
startLocService(LocUploadConfig.instance().getContext());
|
||||
}
|
||||
|
||||
public void stopUpload(){
|
||||
LocationDelegateManager.getInstance().unloadDelegates();
|
||||
stopLocService(LocUploadConfig.instance().getContext());
|
||||
}
|
||||
|
||||
private void startLocService(Context context) {
|
||||
Intent intent = new Intent(context, UploadDataService.class);
|
||||
context.startService(intent);
|
||||
}
|
||||
|
||||
private void stopLocService(Context context) {
|
||||
Intent intent = new Intent(context, UploadDataService.class);
|
||||
context.stopService(intent);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,262 @@
|
||||
package com.mogo.cloud.location.third.core;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class Location implements Parcelable, ILocation {
|
||||
private int locType = 0;
|
||||
private int gpsAccuracyStatus = -1;
|
||||
private int satellites = 0;
|
||||
private int carStatus = 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 adCode = "";
|
||||
private String cityCode = "";
|
||||
private String provider = "";
|
||||
|
||||
public Location() {
|
||||
}
|
||||
|
||||
protected Location(Parcel in) {
|
||||
readFromParcel(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeInt(locType);
|
||||
dest.writeInt(gpsAccuracyStatus);
|
||||
dest.writeInt(satellites);
|
||||
dest.writeInt(carStatus);
|
||||
dest.writeDouble(latitude);
|
||||
dest.writeDouble(longitude);
|
||||
dest.writeDouble(altitude);
|
||||
dest.writeLong(time);
|
||||
dest.writeFloat(bearing);
|
||||
dest.writeFloat(accuracy);
|
||||
dest.writeFloat(speed);
|
||||
dest.writeString(cityName);
|
||||
dest.writeString(adCode);
|
||||
dest.writeString(cityCode);
|
||||
dest.writeString(provider);
|
||||
}
|
||||
|
||||
public void readFromParcel(Parcel in){
|
||||
locType = in.readInt();
|
||||
gpsAccuracyStatus = in.readInt();
|
||||
satellites = in.readInt();
|
||||
carStatus = in.readInt();
|
||||
latitude = in.readDouble();
|
||||
longitude = in.readDouble();
|
||||
altitude = in.readDouble();
|
||||
time = in.readLong();
|
||||
bearing = in.readFloat();
|
||||
accuracy = in.readFloat();
|
||||
speed = in.readFloat();
|
||||
cityName = in.readString();
|
||||
adCode = in.readString();
|
||||
cityCode = in.readString();
|
||||
provider = in.readString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static final Creator<Location> CREATOR = new Creator<Location>() {
|
||||
@Override
|
||||
public Location createFromParcel(Parcel in) {
|
||||
return new Location(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location[] newArray(int size) {
|
||||
return new Location[size];
|
||||
}
|
||||
};
|
||||
|
||||
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 double getAltitude() {
|
||||
return altitude;
|
||||
}
|
||||
|
||||
public void setAltitude(double altitude) {
|
||||
this.altitude = altitude;
|
||||
}
|
||||
|
||||
public void setAdCode(String adcode) {
|
||||
this.adCode = adcode;
|
||||
}
|
||||
|
||||
public String getAdCode() {
|
||||
return 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;
|
||||
}
|
||||
|
||||
public int getGpsAccuracyStatus() {
|
||||
return gpsAccuracyStatus;
|
||||
}
|
||||
|
||||
public void setGpsAccuracyStatus(int gpsAccuracyStatus) {
|
||||
this.gpsAccuracyStatus = gpsAccuracyStatus;
|
||||
}
|
||||
|
||||
public int getSatellites() {
|
||||
return satellites;
|
||||
}
|
||||
|
||||
public void setSatellites(int satellites) {
|
||||
this.satellites = satellites;
|
||||
}
|
||||
|
||||
public int getCarStatus() {
|
||||
return carStatus;
|
||||
}
|
||||
|
||||
public void setCarStatus(int carStatus) {
|
||||
this.carStatus = carStatus;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Location{" +
|
||||
"locType=" + locType +
|
||||
", gpsAccuracyStatus=" + gpsAccuracyStatus +
|
||||
", satellites=" + satellites +
|
||||
", carStatus=" + carStatus +
|
||||
", latitude=" + latitude +
|
||||
", longitude=" + longitude +
|
||||
", altitude=" + altitude +
|
||||
", time=" + time +
|
||||
", bearing=" + bearing +
|
||||
", accuracy=" + accuracy +
|
||||
", speed=" + speed +
|
||||
", cityName='" + cityName + '\'' +
|
||||
", adCode='" + adCode + '\'' +
|
||||
", cityCode='" + cityCode + '\'' +
|
||||
", provider='" + provider + '\'' +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
Location location = (Location) o;
|
||||
return locType == location.locType &&
|
||||
gpsAccuracyStatus == location.gpsAccuracyStatus &&
|
||||
satellites == location.satellites &&
|
||||
carStatus == location.carStatus &&
|
||||
Double.compare(location.latitude, latitude) == 0 &&
|
||||
Double.compare(location.longitude, longitude) == 0 &&
|
||||
Double.compare(location.altitude, altitude) == 0 &&
|
||||
time == location.time &&
|
||||
Float.compare(location.bearing, bearing) == 0 &&
|
||||
Float.compare(location.accuracy, accuracy) == 0 &&
|
||||
Float.compare(location.speed, speed) == 0 &&
|
||||
equals(cityName, location.cityName) &&
|
||||
equals(adCode, location.adCode) &&
|
||||
equals(cityCode, location.cityCode) &&
|
||||
equals(provider, location.provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return hash(locType, gpsAccuracyStatus, satellites, carStatus, latitude, longitude, altitude, time, bearing, accuracy, speed, cityName, adCode, cityCode, provider);
|
||||
}
|
||||
|
||||
private static int hash(Object... values) {
|
||||
return Arrays.hashCode(values);
|
||||
}
|
||||
|
||||
private static boolean equals(Object a, Object b) {
|
||||
return (a == b) || (a != null && a.equals(b));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package com.mogo.cloud.location.third.core;
|
||||
|
||||
import com.elegant.spi.AbstractDelegateManager;
|
||||
import com.elegant.spi.core.visitor.ServiceClassValue;
|
||||
import com.mogo.cloud.utils.logger.Logger;
|
||||
|
||||
public class LocationDelegateManager extends AbstractDelegateManager<LocationServiceProvider>
|
||||
implements AbstractDelegateManager.DelegateListener<Class<? extends LocationServiceProvider>> {
|
||||
|
||||
private static final String TAG = "LocationDelegateManager";
|
||||
|
||||
private LocationServiceProvider locationServiceProvider;
|
||||
|
||||
private boolean loaded = false;
|
||||
|
||||
public static LocationDelegateManager getInstance(){
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static final class SingletonHolder{
|
||||
private static final LocationDelegateManager INSTANCE = new LocationDelegateManager();
|
||||
}
|
||||
|
||||
private LocationDelegateManager(){
|
||||
}
|
||||
|
||||
public void loadDelegates() {
|
||||
if (!loaded) {
|
||||
loadDelegateClasses(LocUploadConfig.instance().getContext(),
|
||||
LocationServiceProvider.class, this);
|
||||
loaded = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void unloadDelegates() {
|
||||
if (loaded) {
|
||||
if(locationServiceProvider != null){
|
||||
Logger.d(TAG, String.format("注销 LocationServiceProvider -> %s",
|
||||
locationServiceProvider.getClass().getName()));
|
||||
locationServiceProvider = null;
|
||||
}
|
||||
loaded = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDelegate(String unit, Class<? extends LocationServiceProvider> p) {
|
||||
try {
|
||||
locationServiceProvider = ServiceClassValue.of(p, unit)
|
||||
.accept(SERVICE_CLASS_VISITOR, unit);
|
||||
Logger.d(TAG, String.format("Biz id is [%s], 注册 LocationServiceProvider -> %s ",
|
||||
unit, p.getName()));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public LocationServiceProvider getLocationServiceProvider(){
|
||||
return locationServiceProvider;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package com.mogo.cloud.location.third.core;
|
||||
|
||||
public abstract class LocationServiceProvider extends AbstractLocation {
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package com.mogo.cloud.location.third.service;
|
||||
|
||||
|
||||
import com.elegant.utils.CheckUtils;
|
||||
import com.google.protobuf.ByteString;
|
||||
import com.mogo.cloud.location.third.core.LocUploadConfig;
|
||||
import com.mogo.cloud.location.third.core.Location;
|
||||
import com.mogo.cloud.location.third.core.LocationDelegateManager;
|
||||
import com.mogo.cloud.location.third.core.LocationServiceProvider;
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
|
||||
import com.mogo.cloud.socket.third.core.SocketClient;
|
||||
import com.mogo.cloud.utils.logger.Logger;
|
||||
import com.zhidao.ptech.connsvr.commom.protocol.MogoCommon;
|
||||
import com.zhidao.ptech.connsvr.payload.protocol.MogoPayload;
|
||||
import com.zhidao.ptech.connsvr.protocol.MogoConnsvr;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class SocketRequestUtil {
|
||||
|
||||
private final static String TAG = "SocketRequestUtil";
|
||||
|
||||
public static void sendCoordinateReqBySocket(MogoPayload.MogoCoornateReq coordinateReq,
|
||||
boolean ack,
|
||||
long msgId) {
|
||||
byte[] data = buildSocketPayload(coordinateReq.toByteArray(), MogoPayload.PayloadMsgType.mogoCoordinateReq_VALUE);
|
||||
sendPayload(data, ack, msgId);
|
||||
}
|
||||
|
||||
private static void sendPayload(byte[] payload, boolean ack, long msgId) {
|
||||
Logger.d(TAG, "Socket---sendPayload");
|
||||
try {
|
||||
SocketClient.getInstance().sendData(LocUploadConfig.instance().getAppId(),
|
||||
MogoCommon.Product.mogoBussiness_VALUE,
|
||||
payload, MogoConnsvr.MsgType.mogoMsgTypeCdntSvrUpReq_VALUE, ack, msgId);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建单个PB-坐标点
|
||||
*/
|
||||
public static MogoPayload.Coordinate buildBCoordinate(Location location) {
|
||||
return MogoPayload.Coordinate.newBuilder()
|
||||
.setTimestamp(System.currentTimeMillis())
|
||||
.setGpsTimestamp(location.getTime())
|
||||
.setLat(location.getLatitude())
|
||||
.setLon(location.getLongitude())
|
||||
.setLockType(location.getLocType())
|
||||
.setAccuracy(location.getAccuracy()) //精度
|
||||
.setCarStatus(location.getCarStatus()) //车状态
|
||||
.setGpsAccuracyStatus(location.getGpsAccuracyStatus()) //精度
|
||||
.setSatellites(location.getSatellites()) //卫星数
|
||||
.setType(MogoPayload.CoordinateType.SOSO_GCJ_COORDINATE)
|
||||
.setGpsSpeed(location.getSpeed()) //
|
||||
.setDirection((int) location.getBearing()) //方向
|
||||
.setHeight((int) location.getAltitude()) //高度
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建外层PB-文件
|
||||
*/
|
||||
public static MogoPayload.MogoCoornateReq getCoordinateReq(List<MogoPayload.Coordinate> coordinates) {
|
||||
if (coordinates == null || coordinates.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final LocationServiceProvider provider = LocationDelegateManager.getInstance().getLocationServiceProvider();
|
||||
|
||||
final MogoPayload.MogoCoornateReq.Builder builder = MogoPayload.MogoCoornateReq.newBuilder()
|
||||
.setTimestamp(System.currentTimeMillis())
|
||||
.addAllCoordinate(coordinates)
|
||||
.setSn(MoGoAiCloudClientConfig.getInstance().getSn());
|
||||
|
||||
if (provider != null && !CheckUtils.isEmpty(provider.getAdCode())) {
|
||||
builder.setAdCode(provider.getAdCode());
|
||||
}
|
||||
|
||||
if (provider != null && !CheckUtils.isEmpty(provider.getCityCode())) {
|
||||
builder.setCityId(provider.getCityCode());
|
||||
}
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
//构建整个payload
|
||||
private static byte[] buildSocketPayload(byte[] payload, int payloadType) {
|
||||
MogoConnsvr.Payload payloadData = MogoConnsvr.Payload.newBuilder()
|
||||
.setMsgType(payloadType)
|
||||
.setPayload(ByteString.copyFrom(payload)).build();
|
||||
return payloadData.toByteArray();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
package com.mogo.cloud.location.third.service;
|
||||
|
||||
import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.os.IBinder;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.elegant.utils.ThreadPoolService;
|
||||
import com.elegant.utils.UiThreadHandler;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import com.mogo.cloud.location.third.core.Location;
|
||||
import com.mogo.cloud.location.third.core.LocationDelegateManager;
|
||||
import com.mogo.cloud.location.third.core.LocationServiceProvider;
|
||||
import com.mogo.cloud.location.third.core.LocUploadConfig;
|
||||
import com.mogo.cloud.socket.third.core.Callback;
|
||||
import com.mogo.cloud.socket.third.core.CallbackManager;
|
||||
import com.mogo.cloud.socket.third.core.SocketClient;
|
||||
import com.mogo.cloud.utils.logger.Logger;
|
||||
import com.zhidao.ptech.connsvr.payload.protocol.MogoPayload;
|
||||
import com.zhidao.ptech.connsvr.protocol.MogoConnsvr;
|
||||
|
||||
import java.util.LinkedList;
|
||||
|
||||
public class UploadDataService extends Service {
|
||||
|
||||
private static final String TAG = "UploadDataService";
|
||||
|
||||
private static final int MAX_LOCATION_CACHE_SIZE = 5;
|
||||
|
||||
private final LinkedList<MogoPayload.Coordinate> coordinates = new LinkedList<>();
|
||||
|
||||
private final Callback callback = new Callback() {
|
||||
@Override
|
||||
public void update(@NonNull CallbackManager manager, @NonNull byte[] message, String appId, long msgId) {
|
||||
Logger.d(TAG, " socket收到的消息 " + new String(message)
|
||||
+ ", app id is " + appId
|
||||
+ ", msg id is " + msgId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAck(@NonNull CallbackManager manager, @NonNull byte[] headerBytes, byte[] content) {
|
||||
try {
|
||||
MogoConnsvr.Header header = MogoConnsvr.Header.parseFrom(headerBytes);
|
||||
if(header != null){
|
||||
Logger.d(TAG, "socket 收到的 onAck " + header.toString());
|
||||
}
|
||||
} catch (InvalidProtocolBufferException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private final Runnable uploadTask = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
ThreadPoolService.execute(UploadDataService.this::publishData);
|
||||
UiThreadHandler.postDelayed(uploadTask, 5 * LocUploadConfig.instance().getLocInterval());
|
||||
}
|
||||
};
|
||||
|
||||
private final Runnable buildLocationTask = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final LocationServiceProvider provider = LocationDelegateManager.getInstance().getLocationServiceProvider();
|
||||
if(provider != null){
|
||||
final Location location = new Location();
|
||||
location.setAccuracy(provider.getAccuracy());
|
||||
location.setAdCode(provider.getAdCode());
|
||||
location.setAltitude(provider.getAltitude());
|
||||
location.setBearing(provider.getBearing());
|
||||
location.setCarStatus(provider.getCarStatus());
|
||||
location.setCityCode(provider.getCityCode());
|
||||
location.setCityName(provider.getCityName());
|
||||
location.setGpsAccuracyStatus(provider.getGpsAccuracyStatus());
|
||||
location.setLatitude(provider.getLatitude());
|
||||
location.setLongitude(provider.getLongitude());
|
||||
location.setLocType(provider.getLocType());
|
||||
location.setProvider(provider.getProvider());
|
||||
location.setSatellites(provider.getSatellites());
|
||||
location.setSpeed(provider.getSpeed());
|
||||
location.setTime(provider.getTime());
|
||||
buildCoordinates(location);
|
||||
}
|
||||
UiThreadHandler.postDelayed(this,LocUploadConfig.instance().getLocInterval());
|
||||
}
|
||||
};
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
SocketClient.getInstance().registerSocketCallback(callback);
|
||||
UiThreadHandler.post(buildLocationTask);
|
||||
UiThreadHandler.postDelayed(uploadTask, 5 * LocUploadConfig.instance().getLocInterval());
|
||||
}
|
||||
|
||||
private void publishData() {
|
||||
final MogoPayload.MogoCoornateReq coordinateReq = SocketRequestUtil.getCoordinateReq(coordinates);
|
||||
if (coordinateReq != null) {
|
||||
SocketRequestUtil.sendCoordinateReqBySocket(coordinateReq, true, System.currentTimeMillis());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
SocketClient.getInstance().unregisterSocketCallback(callback);
|
||||
UiThreadHandler.removeCallbacks(uploadTask);
|
||||
UiThreadHandler.removeCallbacks(buildLocationTask);
|
||||
clearLocationCache();
|
||||
}
|
||||
|
||||
private void buildCoordinates(Location location) {
|
||||
MogoPayload.Coordinate coordinate = SocketRequestUtil.buildBCoordinate(location);
|
||||
if (coordinate.getLat() != 0 && coordinate.getLon() != 0) {
|
||||
Logger.d(TAG, "socket-location is " + location.toString());
|
||||
Logger.d(TAG, "socket-coordinates.size()" + coordinates.size());
|
||||
coordinates.offer(coordinate);
|
||||
} else {
|
||||
Logger.d(TAG, "coordinates size is 0, give up uploading for Socket");
|
||||
}
|
||||
|
||||
while (coordinates.size() > MAX_LOCATION_CACHE_SIZE) {
|
||||
Logger.d(TAG, "socket-coordinates number is " + coordinates.size());
|
||||
coordinates.pop();
|
||||
}
|
||||
}
|
||||
|
||||
private void clearLocationCache(){
|
||||
coordinates.clear();
|
||||
}
|
||||
}
|
||||
@@ -36,22 +36,22 @@ PASSWORD=xintai2018
|
||||
RELEASE=true
|
||||
# AI CLOUD 云平台
|
||||
# 工具类
|
||||
MOGO_UTILS_VERSION=1.3.0
|
||||
MOGO_UTILS_VERSION=1.3.1
|
||||
# 网络请求
|
||||
MOGO_NETWORK_VERSION=1.3.0
|
||||
MOGO_NETWORK_VERSION=1.3.1
|
||||
# 网络DNS
|
||||
MOGO_HTTPDNS_VERSION=1.3.0
|
||||
MOGO_HTTPDNS_VERSION=1.3.1
|
||||
# 鉴权
|
||||
MOGO_PASSPORT_VERSION=1.3.0
|
||||
MOGO_PASSPORT_VERSION=1.3.1
|
||||
# 常链接
|
||||
MOGO_SOCKET_VERSION=1.3.0
|
||||
MOGO_SOCKET_VERSION=1.3.1
|
||||
# 数据采集
|
||||
MOGO_REALTIME_VERSION=1.3.0
|
||||
MOGO_REALTIME_VERSION=1.3.1
|
||||
# 探路,道路事件发布,获取
|
||||
MOGO_TANLU_VERSION=1.3.0
|
||||
MOGO_TANLU_VERSION=1.3.1
|
||||
# 直播推流
|
||||
MOGO_LIVE_VERSION=1.3.0
|
||||
MOGO_LIVE_VERSION=1.3.1
|
||||
# 直播拉流
|
||||
MOGO_TRAFFICLIVE_VERSION=1.3.0
|
||||
MOGO_TRAFFICLIVE_VERSION=1.3.1
|
||||
# 定位服务
|
||||
MOGO_LOCATION_VERSION=1.3.0
|
||||
MOGO_LOCATION_VERSION=1.3.1
|
||||
|
||||
Reference in New Issue
Block a user