From 784861d3ff1ff7b33aa188570a3cfb41c8ac1ece Mon Sep 17 00:00:00 2001 From: liujing Date: Wed, 20 Jan 2021 21:19:38 +0800 Subject: [PATCH 1/4] =?UTF-8?q?[add]=20=E6=9A=82=E5=AD=98snapshotuploadint?= =?UTF-8?q?ime=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 2/4] [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 3/4] =?UTF-8?q?[add]=20SnapshotUploadInTime=20=E7=B1=BB=20?= =?UTF-8?q?=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 4/4] =?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; }