fix bug of location to upload socket server

This commit is contained in:
zhongchao
2021-11-17 17:14:22 +08:00
parent d3d355c442
commit 444b7a4c68
23 changed files with 1113 additions and 25 deletions

2
.idea/misc.xml generated
View File

@@ -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>

View File

@@ -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")

View File

@@ -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>

View 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();
}
}

View File

@@ -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);

View File

@@ -76,6 +76,7 @@ public class MoGoApplication extends MultiDexApplication {
}
});
clientConfig.setUseOriginSocket(true);
// 初始化SDK可以设置状态回调来监听
MoGoAiCloudClient.getInstance().init(this, clientConfig);
}

View File

@@ -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");
}
}

View File

@@ -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;
}
}

View 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>

View File

@@ -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"

View File

@@ -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")
}
}

View File

@@ -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>

View File

@@ -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");
}

View File

@@ -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) {
}
}

View File

@@ -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);
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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));
}
}

View File

@@ -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;
}
}

View File

@@ -0,0 +1,4 @@
package com.mogo.cloud.location.third.core;
public abstract class LocationServiceProvider extends AbstractLocation {
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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