diff --git a/app_ipc_monitoring/build.gradle b/app_ipc_monitoring/build.gradle
index 242357adb3..a023efe6fa 100644
--- a/app_ipc_monitoring/build.gradle
+++ b/app_ipc_monitoring/build.gradle
@@ -69,6 +69,7 @@ dependencies {
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation rootProject.ext.dependencies.gson
implementation project(':libraries:mogo-adas')
+ implementation project(':libraries:mogo-adas-backgrounder-permission')
// implementation 'com.zhidao.support.adas:high:2.6.6.0'
// implementation 'com.zhjt.mogo.adas.data:adas-data:2.6.6.0'
compileOnly project(':core:mogo-core-data')
diff --git a/app_ipc_monitoring/src/main/AndroidManifest.xml b/app_ipc_monitoring/src/main/AndroidManifest.xml
index eff7016ee7..13164a794c 100644
--- a/app_ipc_monitoring/src/main/AndroidManifest.xml
+++ b/app_ipc_monitoring/src/main/AndroidManifest.xml
@@ -1,7 +1,9 @@
-
+
+
@@ -61,6 +63,40 @@
android:theme="@style/AppTheme.NoActionBar">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/BootCompletedReceive.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/BootCompletedReceive.java
new file mode 100644
index 0000000000..84d033637b
--- /dev/null
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/BootCompletedReceive.java
@@ -0,0 +1,13 @@
+package com.zhidao.adas.client;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+public class BootCompletedReceive extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Log.i("开机", "启动");
+ }
+}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java
index 64d47bc670..9c5904dc23 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java
@@ -2,13 +2,15 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
public class ArrivalNotification extends BaseInfo {
public final MessagePad.ArrivalNotification bean;
- public ArrivalNotification(MessagePad.Header header, MessagePad.ArrivalNotification bean) {
- super("接收", bean.getSerializedSize(), header);
+ public ArrivalNotification(MessagePad.Header header, MessagePad.ArrivalNotification bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java
index aaebc9ba7a..e3a2c31b98 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java
@@ -2,13 +2,15 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
public class AutopilotState extends BaseInfo {
public final MessagePad.AutopilotState bean;
- public AutopilotState(MessagePad.Header header, MessagePad.AutopilotState bean) {
- super("接收", bean.getSerializedSize(), header);
+ public AutopilotState(MessagePad.Header header, MessagePad.AutopilotState bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BaseInfo.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BaseInfo.java
index b05ed5b232..dc56ac3fc9 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BaseInfo.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BaseInfo.java
@@ -1,7 +1,8 @@
package com.zhidao.adas.client.bean;
-import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import mogo.telematics.pad.MessagePad;
@@ -10,12 +11,14 @@ public abstract class BaseInfo {
public final long nowTime;
public final MessagePad.Header header;
public final int len;
+ private SimpleDateFormat sdf;
- public BaseInfo(String action, int len, MessagePad.Header header) {
+ public BaseInfo(String action, int len, MessagePad.Header header, SimpleDateFormat sdf) {
this.action = action;
nowTime = System.currentTimeMillis();
this.len = 8 + header.getSerializedSize() + len;
this.header = header;
+ this.sdf = sdf;
}
public BaseInfo(String action, int len) {
@@ -27,6 +30,8 @@ public abstract class BaseInfo {
@Override
public String toString() {
- return "原始数据长度:"+len + "\nHeader:[" + TextFormat.printer().escapingNonAscii(false).shortDebugString(header) + "]\n";
+ return "原始数据长度:" + len + "\nHeader:[" + "MessageID:" + header.getMsgID() +
+ " MessageType:" + header.getMsgType() + " 发送时间:" + sdf.format(new Date((long) (header.getTimestamp() * 1000)))
+ + " 数据源时间:" + sdf.format(new Date((long) (header.getSourceTimestamp() * 1000))) + "]\n";
}
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java
index 496d32df71..bce516eee2 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java
@@ -2,13 +2,15 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
public class BasicInfoReq extends BaseInfo {
public final MessagePad.BasicInfoReq bean;
- public BasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq bean) {
- super("接收", bean.getSerializedSize(), header);
+ public BasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java
index 0fadfaa882..c8b3b390f3 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java
@@ -2,13 +2,15 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
public class CarConfigResp extends BaseInfo {
public final MessagePad.CarConfigResp bean;
- public CarConfigResp(MessagePad.Header header, MessagePad.CarConfigResp bean) {
- super("接收", bean.getSerializedSize(), header);
+ public CarConfigResp(MessagePad.Header header, MessagePad.CarConfigResp bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java
index 5d4d67cd6d..bd5be112a6 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java
@@ -2,13 +2,15 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
public class GlobalPathResp extends BaseInfo {
public final MessagePad.GlobalPathResp bean;
- public GlobalPathResp(MessagePad.Header header, MessagePad.GlobalPathResp bean) {
- super("接收", bean.getSerializedSize(), header);
+ public GlobalPathResp(MessagePad.Header header, MessagePad.GlobalPathResp bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java
index 2e37afa373..1ebd36a34f 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java
@@ -2,13 +2,15 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
public class GnssInfo extends BaseInfo {
public final MessagePad.GnssInfo bean;
- public GnssInfo(MessagePad.Header header, MessagePad.GnssInfo bean) {
- super("接收", bean.getSerializedSize(), header);
+ public GnssInfo(MessagePad.Header header, MessagePad.GnssInfo bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java
index 54c4eb7be9..ec25240c06 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java
@@ -2,14 +2,16 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
import mogo_msg.MogoReportMsg;
public class MogoReportMessage extends BaseInfo {
public final MogoReportMsg.MogoReportMessage bean;
- public MogoReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage bean) {
- super("接收", bean.getSerializedSize(), header);
+ public MogoReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MyPointCloud.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MyPointCloud.java
index b6214a4637..44143d894a 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MyPointCloud.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MyPointCloud.java
@@ -2,14 +2,16 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
import rule_segement.MogoPointCloudOuterClass;
public class MyPointCloud extends BaseInfo {
public final MogoPointCloudOuterClass.MogoPointCloud bean;
- public MyPointCloud(MessagePad.Header header, MogoPointCloudOuterClass.MogoPointCloud bean) {
- super("接收", bean.getSerializedSize(), header);
+ public MyPointCloud(MessagePad.Header header, MogoPointCloudOuterClass.MogoPointCloud bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java
index 5587a6acd8..585a18d0a6 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java
@@ -2,14 +2,16 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
import perception.TrafficLightOuterClass;
public class PerceptionTrafficLight extends BaseInfo {
public final TrafficLightOuterClass.TrafficLights bean;
- public PerceptionTrafficLight(MessagePad.Header header, TrafficLightOuterClass.TrafficLights bean) {
- super("接收", bean.getSerializedSize(), header);
+ public PerceptionTrafficLight(MessagePad.Header header, TrafficLightOuterClass.TrafficLights bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningObjects.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningObjects.java
index cc124d82c9..68c1947de2 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningObjects.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningObjects.java
@@ -2,13 +2,15 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
public class PlanningObjects extends BaseInfo {
public final MessagePad.PlanningObjects bean;
- public PlanningObjects(MessagePad.Header header, MessagePad.PlanningObjects bean) {
- super("接收", bean.getSerializedSize(), header);
+ public PlanningObjects(MessagePad.Header header, MessagePad.PlanningObjects bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PredictionObstacleTrajectory.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PredictionObstacleTrajectory.java
index 5ea6472a70..b6b070e110 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PredictionObstacleTrajectory.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PredictionObstacleTrajectory.java
@@ -2,14 +2,16 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
import prediction.Prediction;
public class PredictionObstacleTrajectory extends BaseInfo {
public final Prediction.mPredictionObjects bean;
- public PredictionObstacleTrajectory(MessagePad.Header header, Prediction.mPredictionObjects bean) {
- super("接收", bean.getSerializedSize(), header);
+ public PredictionObstacleTrajectory(MessagePad.Header header, Prediction.mPredictionObjects bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java
index c00cce9217..a5d8cd7964 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java
@@ -2,14 +2,16 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
import record_cache.RecordPanelOuterClass;
public class RecordPanel extends BaseInfo {
public final RecordPanelOuterClass.RecordPanel bean;
- public RecordPanel(MessagePad.Header header, RecordPanelOuterClass.RecordPanel bean) {
- super("接收", bean.getSerializedSize(), header);
+ public RecordPanel(MessagePad.Header header, RecordPanelOuterClass.RecordPanel bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/StatusInfo.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/StatusInfo.java
index e0f6c419a7..72a96e6b7a 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/StatusInfo.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/StatusInfo.java
@@ -2,14 +2,16 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
import system_master.SystemStatusInfo;
public class StatusInfo extends BaseInfo {
public final SystemStatusInfo.StatusInfo bean;
- public StatusInfo(MessagePad.Header header, SystemStatusInfo.StatusInfo bean) {
- super("接收", bean.getSerializedSize(), header);
+ public StatusInfo(MessagePad.Header header, SystemStatusInfo.StatusInfo bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java
index efcbcb2fef..6f49037779 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java
@@ -2,13 +2,15 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
public class TrackedObjects extends BaseInfo {
private MessagePad.TrackedObjects bean;
- public TrackedObjects(MessagePad.Header header, MessagePad.TrackedObjects bean) {
- super("接收", bean.getSerializedSize(), header);
+ public TrackedObjects(MessagePad.Header header, MessagePad.TrackedObjects bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java
index ac4cbe5c33..764d7fa44e 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java
@@ -2,13 +2,15 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
public class Trajectory extends BaseInfo {
public final MessagePad.Trajectory bean;
- public Trajectory(MessagePad.Header header, MessagePad.Trajectory bean) {
- super("接收", bean.getSerializedSize(), header);
+ public Trajectory(MessagePad.Header header, MessagePad.Trajectory bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
@Override
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java
index ebdacb3c7d..aabab1571e 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java
@@ -2,14 +2,16 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import chassis.VehicleStateOuterClass;
import mogo.telematics.pad.MessagePad;
public class VehicleState extends BaseInfo {
public final VehicleStateOuterClass.VehicleState bean;
- public VehicleState(MessagePad.Header header, VehicleStateOuterClass.VehicleState bean) {
- super("接收", bean.getSerializedSize(), header);
+ public VehicleState(MessagePad.Header header, VehicleStateOuterClass.VehicleState bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java
index fd41e8e212..5bb43ebaaa 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java
@@ -2,13 +2,15 @@ package com.zhidao.adas.client.bean;
import com.google.protobuf.TextFormat;
+import java.text.SimpleDateFormat;
+
import mogo.telematics.pad.MessagePad;
public class Warn extends BaseInfo {
public final MessagePad.Warn bean;
- public Warn(MessagePad.Header header, MessagePad.Warn bean) {
- super("接收", bean.getSerializedSize(), header);
+ public Warn(MessagePad.Header header, MessagePad.Warn bean, SimpleDateFormat sdf) {
+ super("接收", bean.getSerializedSize(), header, sdf);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/ConnectStatusSave.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/ConnectStatusSave.java
new file mode 100644
index 0000000000..03c4632db9
--- /dev/null
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/ConnectStatusSave.java
@@ -0,0 +1,150 @@
+package com.zhidao.adas.client.log;
+
+import android.os.Environment;
+import android.text.TextUtils;
+
+import com.zhidao.adas.client.utils.Constants;
+import com.zhidao.support.adas.high.common.ThreadPoolManager;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import java.util.concurrent.Future;
+import java.util.concurrent.LinkedBlockingQueue;
+
+/**
+ * 与服务器交互日志管理任务
+ */
+public class ConnectStatusSave {
+ private static final String TAG = ConnectStatusSave.class.getSimpleName();
+ private static final String LOG_FILE_NAME = "ConnectStatus-%s.log";//文件名称
+ private volatile static ConnectStatusSave INSTANCE;
+ private static final long MAX_CAPACITY = 20 * 1024 * 1024L;//单文件最大存储容量 kb
+ private final LinkedBlockingQueue queue;
+ private BufferedWriter buff = null;
+ private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss-SSS", Locale.getDefault());
+ private File file;
+ private volatile long capacity = MAX_CAPACITY;
+ private Future future;
+
+ private ConnectStatusSave() {
+ queue = new LinkedBlockingQueue<>();
+ }
+
+ public static ConnectStatusSave getInstance() {
+ if (INSTANCE == null) {
+ synchronized (ConnectStatusSave.class) {
+ if (INSTANCE == null) {
+ INSTANCE = new ConnectStatusSave();
+ }
+ }
+ }
+ return INSTANCE;
+ }
+
+
+ public boolean isSdcardUse() {
+ boolean bl = false;
+ if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
+ bl = true;
+ }
+ return bl;
+ }
+
+ private synchronized void getFile() throws IOException {
+ if (isSdcardUse()) {
+ String time = sdf.format(new Date());
+ String childPath = time.split("_")[0] + File.separator;
+ file = new File(Constants.ROOT_PATH + childPath + String.format(LOG_FILE_NAME, time));
+ if (!file.exists()) {
+ if (!file.getParentFile().exists()) {
+ file.getParentFile().mkdirs();
+ }
+ file.createNewFile();
+ }
+ FileWriter fw = new FileWriter(file, true);
+ buff = new BufferedWriter(fw);
+ }
+ }
+
+
+ public void saveLog(String info) {
+ if (isStart()) {
+ queue.add(info);
+ }
+ }
+
+ public boolean isStart() {
+ return future != null;
+ }
+
+ public void start() {
+ if (future == null) {
+ future = ThreadPoolManager.getsInstance().submit(new WriteThread());
+ }
+ }
+
+ public void stop() {
+ if (future != null) {
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ queue.clear();
+ if (!future.isCancelled()) {
+ future.cancel(true);
+ }
+ future = null;
+ closeBufferedWriter();
+ }
+ };
+ ThreadPoolManager.getsInstance().execute(runnable);
+ }
+ }
+
+ private void closeBufferedWriter() {
+ if (buff != null) {
+ try {
+ buff.flush();
+ buff.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ buff = null;
+ }
+
+ }
+
+ private class WriteThread implements Runnable {
+
+ @Override
+ public void run() {
+ synchronized (this) {
+ while (!Thread.currentThread().isInterrupted()) {
+ try {
+ long size = 0;
+ if (file != null) {
+ size = file.length();
+ }
+ if (size > capacity || file == null || !file.exists() || buff == null) {
+ closeBufferedWriter();
+ getFile();
+ }
+ String data = queue.take();
+ if (buff != null && !TextUtils.isEmpty(data)) {
+ buff.write(data);
+ buff.newLine();
+ buff.flush();
+ }
+ } catch (IOException | InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+
+}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/LogSave.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/LogSave.java
index 58435bf681..0e9fd80b99 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/LogSave.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/LogSave.java
@@ -3,6 +3,7 @@ package com.zhidao.adas.client.log;
import android.os.Environment;
import android.text.TextUtils;
+import com.zhidao.adas.client.utils.Constants;
import com.zhidao.support.adas.high.common.ThreadPoolManager;
import java.io.BufferedWriter;
@@ -20,7 +21,6 @@ import java.util.concurrent.LinkedBlockingQueue;
*/
public class LogSave {
private static final String TAG = LogSave.class.getSimpleName();
- private static final String ROOT_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "IPCMonitoring" + File.separator;//程序外部存储跟目录
private static final String LOG_FILE_NAME = "%s.log";//文件名称
private volatile static LogSave INSTANCE;
private static final long MAX_CAPACITY = 20 * 1024 * 1024L;//单文件最大存储容量 kb
@@ -59,7 +59,7 @@ public class LogSave {
if (isSdcardUse()) {
String time = sdf.format(new Date());
String childPath = time.split("_")[0] + File.separator;
- file = new File(ROOT_PATH + childPath + String.format(LOG_FILE_NAME, time));
+ file = new File(Constants.ROOT_PATH + childPath + String.format(LOG_FILE_NAME, time));
if (!file.exists()) {
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java
index e634012900..4624f1769b 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java
@@ -7,11 +7,14 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.net.Uri;
+import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Message;
+import android.os.PowerManager;
import android.provider.Settings;
import android.text.Editable;
+import android.text.Html;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
@@ -71,6 +74,7 @@ import com.zhidao.adas.client.bean.TrackedObjects;
import com.zhidao.adas.client.bean.Trajectory;
import com.zhidao.adas.client.bean.VehicleState;
import com.zhidao.adas.client.bean.Warn;
+import com.zhidao.adas.client.log.ConnectStatusSave;
import com.zhidao.adas.client.log.LogSave;
import com.zhidao.adas.client.utils.Constants;
import com.zhidao.support.adas.high.AdasManager;
@@ -88,10 +92,13 @@ import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
@@ -107,6 +114,7 @@ import system_master.SystemStatusInfo;
public class MainActivity extends BaseActivity implements OnAdasListener, OnAdasConnectStatusListener, BaseAdapter.OnItemClickListener {
private final static String TAG = MainActivity.class.getSimpleName();
+ private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.getDefault());
private static final int WHAT_IPC_IP = 0x00;
private static final int WHAT_DRIVER_IP = 0x01;
private static final int WHAT_IPC_CONNECT_STATE = 0x02;
@@ -115,6 +123,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
private ImageView tvIp;
private TextView title;
private TextView ipcIp;
+ private TextView background;
private TextView localIp;
private View line;
private View line1;
@@ -161,12 +170,15 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
// LogSave.getInstance().stop();
// }
+ PowerManager.WakeLock wakeLock;
+ WifiManager.WifiLock wifiLock;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initHandler();
+ ConnectStatusSave.getInstance().start();
isPad = isPad(this);
if (!isPad)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
@@ -177,6 +189,40 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
onUpdateConnectStateView();
showIPCIP();
canDrawOverlays();
+// PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
+// wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
+// wakeLock.acquire();
+// int wifiLockType = WifiManager.WIFI_MODE_FULL;
+// try {
+// wifiLockType = WifiManager.class.getField("WIFI_MODE_FULL_HIGH_PERF").getInt(null);
+// } catch (Exception e) {
+// // 我们必须运行在一个pre-Honeycomb设备上。
+// Log.w(TAG, "无法获得高性能wifi锁.");
+// }
+// WifiManager wifiManager = WifiManager.class.cast(getApplicationContext().getSystemService(WIFI_SERVICE));
+// wifiLock = wifiManager.createWifiLock(wifiLockType, TAG);
+// wifiLock.acquire();
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ AdasManager.getInstance().setOnAdasListener(null);
+ AdasManager.getInstance().disconnect();
+ if (mExecutorServiceConfigTimer != null) {
+ mExecutorServiceConfigTimer.shutdownNow();
+ }
+ DataDistribution.getInstance().stop();
+ if (floatWindow != null) {
+ floatWindow.hideFloatWindow();
+ floatWindow = null;
+ }
+ ConnectStatusSave.getInstance().stop();
+ // 释放唤醒锁, 如果没有其它唤醒锁存在, 设备会很快进入休眠状态
+ if (wakeLock != null)
+ wakeLock.release();
+ if (wifiLock != null)
+ wifiLock.release();
}
private void canDrawOverlays() {
@@ -214,6 +260,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
private void initView() {
include_title = findViewById(R.id.include_title);
etIp = findViewById(R.id.et_ip);
+ background = findViewById(R.id.background);
role = findViewById(R.id.role);
line = findViewById(R.id.line);
line1 = findViewById(R.id.line1);
@@ -477,6 +524,22 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
}
}
});
+
+// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+// String str = "后台运行:" + (AdasManager.getInstance().isPermissionLongBackgroundRunning(this) ? "已优化" : "未优化");
+// background.setText(Html.fromHtml(str, Html.FROM_HTML_MODE_LEGACY));
+// background.setOnClickListener(new View.OnClickListener() {
+// @Override
+// public void onClick(View v) {
+//
+//// Permission.requestAddDataSaverWhite(MainActivity.this);
+//// AdasManager.getInstance().requestIgnoreBatteryOptimizations(MainActivity.this);
+// AdasManager.getInstance().showPermissionLongBackgroundRunningDialog(MainActivity.this);
+// }
+// });
+// } else {
+// background.setVisibility(View.GONE);
+// }
}
private void showListPopupWindow() {
@@ -690,56 +753,56 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
@Override
public void onTrajectory(MessagePad.Header header, MessagePad.Trajectory trajectory) {
- Trajectory base = new Trajectory(header, trajectory);
+ Trajectory base = new Trajectory(header, trajectory, sdf);
DataDistribution.getInstance().addData(base);
}
@Override
public void onTrackedObjects(MessagePad.Header header, MessagePad.TrackedObjects trackedObjects) {
- TrackedObjects base = new TrackedObjects(header, trackedObjects);
+ TrackedObjects base = new TrackedObjects(header, trackedObjects, sdf);
DataDistribution.getInstance().addData(base);
}
@Override
public void onGnssInfo(MessagePad.Header header, MessagePad.GnssInfo gnssInfo) {
- GnssInfo base = new GnssInfo(header, gnssInfo);
+ GnssInfo base = new GnssInfo(header, gnssInfo, sdf);
DataDistribution.getInstance().addData(base);
}
@Override
public void onVehicleState(MessagePad.Header header, VehicleStateOuterClass.VehicleState vehicleState) {
- VehicleState base = new VehicleState(header, vehicleState);
+ VehicleState base = new VehicleState(header, vehicleState, sdf);
DataDistribution.getInstance().addData(base);
}
@Override
public void onAutopilotState(MessagePad.Header header, MessagePad.AutopilotState autopilotState) {
- AutopilotState base = new AutopilotState(header, autopilotState);
+ AutopilotState base = new AutopilotState(header, autopilotState, sdf);
DataDistribution.getInstance().addData(base);
}
@Override
public void onReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage mogoReportMessage) {
- MogoReportMessage base = new MogoReportMessage(header, mogoReportMessage);
+ MogoReportMessage base = new MogoReportMessage(header, mogoReportMessage, sdf);
DataDistribution.getInstance().addData(base);
}
@Override
public void onPerceptionTrafficLight(MessagePad.Header header, TrafficLightOuterClass.TrafficLights trafficLights) {
- PerceptionTrafficLight base = new PerceptionTrafficLight(header, trafficLights);
+ PerceptionTrafficLight base = new PerceptionTrafficLight(header, trafficLights, sdf);
DataDistribution.getInstance().addData(base);
}
@Override
public void onPredictionObstacleTrajectory(MessagePad.Header header, Prediction.mPredictionObjects predictionObjects) {
- PredictionObstacleTrajectory base = new PredictionObstacleTrajectory(header, predictionObjects);
+ PredictionObstacleTrajectory base = new PredictionObstacleTrajectory(header, predictionObjects, sdf);
DataDistribution.getInstance().addData(base);
}
@Override
public void onPointCloud(MessagePad.Header header, MogoPointCloudOuterClass.MogoPointCloud pointCloud) {
- MyPointCloud base = new MyPointCloud(header, pointCloud);
+ MyPointCloud base = new MyPointCloud(header, pointCloud, sdf);
DataDistribution.getInstance().addData(base);
// String data = PointCloudDecoder.decode(header, pointCloud);
// Log.i("dddd", "data==" + data.length());
@@ -749,13 +812,13 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
@Override
public void onPlanningObjects(MessagePad.Header header, MessagePad.PlanningObjects planningObjects) {
- PlanningObjects base = new PlanningObjects(header, planningObjects);
+ PlanningObjects base = new PlanningObjects(header, planningObjects, sdf);
DataDistribution.getInstance().addData(base);
}
@Override
public void onBasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq basicInfoReq) {
- BasicInfoReq info = new BasicInfoReq(header, basicInfoReq);
+ BasicInfoReq info = new BasicInfoReq(header, basicInfoReq, sdf);
DataDistribution.getInstance().addData(info);
AdasManager.getInstance().sendBasicInfoResp("X202021111192N41VY", 0);
showToastCenter("收到车机基础信息请求:" + info.toString());
@@ -763,13 +826,13 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
@Override
public void onCarConfigResp(MessagePad.Header header, MessagePad.CarConfigResp carConfigResp) {
- CarConfigResp base = new CarConfigResp(header, carConfigResp);
+ CarConfigResp base = new CarConfigResp(header, carConfigResp, sdf);
DataDistribution.getInstance().addData(base);
}
@Override
public void onRecordResult(MessagePad.Header header, RecordPanelOuterClass.RecordPanel recordPanel) {
- RecordPanel base = new RecordPanel(header, recordPanel);
+ RecordPanel base = new RecordPanel(header, recordPanel, sdf);
DataDistribution.getInstance().addData(base);
recordKey = recordPanel.getKey();
recordFileName = recordPanel.getFilename();
@@ -777,25 +840,25 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
@Override
public void onGlobalPathResp(MessagePad.Header header, MessagePad.GlobalPathResp globalPathResp) {
- GlobalPathResp base = new GlobalPathResp(header, globalPathResp);
+ GlobalPathResp base = new GlobalPathResp(header, globalPathResp, sdf);
DataDistribution.getInstance().addData(base);
}
@Override
public void onWarn(MessagePad.Header header, MessagePad.Warn warn) {
- Warn base = new Warn(header, warn);
+ Warn base = new Warn(header, warn, sdf);
DataDistribution.getInstance().addData(base);
}
@Override
public void onArrivalNotification(MessagePad.Header header, MessagePad.ArrivalNotification arrivalNotification) {
- ArrivalNotification base = new ArrivalNotification(header, arrivalNotification);
+ ArrivalNotification base = new ArrivalNotification(header, arrivalNotification, sdf);
DataDistribution.getInstance().addData(base);
}
@Override
public void onStatusQueryResp(MessagePad.Header header, SystemStatusInfo.StatusInfo statusInfo) {
- StatusInfo base = new StatusInfo(header, statusInfo);
+ StatusInfo base = new StatusInfo(header, statusInfo, sdf);
DataDistribution.getInstance().addData(base);
}
@@ -892,21 +955,11 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
}
- @Override
- protected void onDestroy() {
- super.onDestroy();
- AdasManager.getInstance().setOnAdasListener(null);
- AdasManager.getInstance().disconnect();
- if (mExecutorServiceConfigTimer != null) {
- mExecutorServiceConfigTimer.shutdownNow();
- }
- DataDistribution.getInstance().stop();
- }
-
-
@Override
public void onConnectionIPCStatus(int ipcConnectionStatus, String reason) {
- Log.i(TAG, "连接状态=" + (reason == null ? "主动断开连接" : reason));
+// Log.i(TAG, "连接状态=" + (reason == null ? "主动断开连接" : reason));
+ String time = sdf.format(new Date());
+ ConnectStatusSave.getInstance().saveLog(time + " ipcConnectionStatus=" + ipcConnectionStatus + " reason=" + reason);
connectStatusList.add(0, new IPCConnectState(reason == null ? "主动断开连接" : reason, getStatusColor(ipcConnectionStatus)));
if (connectStatusList.size() > 100) {
connectStatusList.remove(connectStatusList.size() - 1);
@@ -924,12 +977,12 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
getHandler().sendEmptyMessage(WHAT_IPC_IP);
}
// LogSave.getInstance().saveLog("连接状态", status);
- CupidLogUtils.i(TAG, "connectStatus=" + status);
+// CupidLogUtils.i(TAG, "connectStatus=" + status);
}
@Override
public void onCompatibility(VersionCompatibility versionCompatibility) {
- showToastCenter("所连工控机:\n" + versionCompatibility.toString(), Toast.LENGTH_LONG);
+ showToastCenter("所连工控机:\n" + (versionCompatibility == null ? "未连接" : versionCompatibility.toString()), Toast.LENGTH_LONG);
}
private void showLocalIP() {
@@ -1023,7 +1076,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
break;
case 2:
//发送sn
- AdasManager.getInstance().sendBasicInfoResp("X202021111192N41VY", 1);
+ AdasManager.getInstance().sendBasicInfoResp("X202021111192N41VY", 0);
break;
case 3:
//数据采集5秒
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/Constants.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/Constants.java
index 16c93a6ac7..6073b61c67 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/Constants.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/Constants.java
@@ -1,6 +1,7 @@
package com.zhidao.adas.client.utils;
import android.content.Context;
+import android.os.Environment;
import android.text.TextUtils;
import com.google.gson.reflect.TypeToken;
@@ -8,8 +9,11 @@ import com.zhidao.adas.client.bean.AutoPilotMode;
import com.zhidao.support.adas.high.common.JsonUtil;
import com.zhidao.support.adas.high.common.MessageType;
+import java.io.File;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
+import java.util.Locale;
/**
* @author song kenan
@@ -17,6 +21,9 @@ import java.util.List;
* @date 2021/10/8
*/
public class Constants {
+ public static final String ROOT_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "IPCMonitoring" + File.separator;//程序外部存储跟目录
+ public static final String FILE_PATH = ROOT_PATH + "Crash" + File.separator;
+
private static final String ALL_PATH = "all_path";//所有路线
private static final String DEFAULT_PATH = "[{\"endLatLon\":{\"latitude\":40.19774,\"longitude\":116.72704},\"endName\":\"汇源果汁\",\"name\":\"北京市顺义区北小营镇\",\"speedLimit\":20.0,\"startLatLon\":{\"latitude\":40.20047,\"longitude\":116.73512},\"startName\":\"13号路口西\"},{\"endLatLon\":{\"latitude\":40.19996,\"longitude\":116.73584},\"endName\":\"13号路口(主路)\",\"name\":\"北京市顺义区北小营镇\",\"speedLimit\":20.0,\"startLatLon\":{\"latitude\":40.19763,\"longitude\":116.72686},\"startName\":\"汇源果汁\"}]";
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/CrashHandler.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/CrashHandler.java
index 86a38c657a..14957a6a1f 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/CrashHandler.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/CrashHandler.java
@@ -23,7 +23,6 @@ import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
-import java.util.Objects;
/**
@@ -40,7 +39,7 @@ import java.util.Objects;
* @since Ver 1.0 I used to be a programmer like you, then I took an arrow in the knee
*/
public class CrashHandler implements UncaughtExceptionHandler {
- private static final String FILE_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "IPCMonitoring" + File.separator + "Crash" + File.separator;//程序外部存储跟目录
+
/**
* Log日志的tag
* String : TAG
@@ -75,7 +74,7 @@ public class CrashHandler implements UncaughtExceptionHandler {
*
* @since 2013-3-21下午8:46:15
*/
- private final Map mLogInfo = new HashMap();
+ private Map mLogInfo = new HashMap();
/**
* 用于格式化日期,作为日志文件名的一部分(FIXME 注意在windows下文件名无法使用:等符号!)
* SimpleDateFormat : mSimpleDateFormat
@@ -219,8 +218,11 @@ public class CrashHandler implements UncaughtExceptionHandler {
for (Field field : mFields) {
try {
field.setAccessible(true);
- mLogInfo.put(field.getName(), Objects.requireNonNull(field.get("")).toString());
- } catch (IllegalArgumentException | IllegalAccessException e) {
+ mLogInfo.put(field.getName(), field.get("").toString());
+ Log.d(TAG, field.getName() + ":" + field.get(""));
+ } catch (IllegalArgumentException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
e.printStackTrace();
}
}
@@ -270,8 +272,8 @@ public class CrashHandler implements UncaughtExceptionHandler {
String mFileName = mContext.getPackageName() + "_Exception-" + mTime + ".log";
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
try {
- File mDirectory = new File(FILE_PATH);
- Log.v(TAG, mDirectory.toString());
+ File mDirectory = new File(Constants.FILE_PATH);
+ Log.d(TAG, mDirectory.toString());
if (!mDirectory.exists())
mDirectory.mkdirs();
FileOutputStream mFileOutputStream = new FileOutputStream(mDirectory + File.separator + mFileName);
diff --git a/app_ipc_monitoring/src/main/res/drawable/bg_dialog.xml b/app_ipc_monitoring/src/main/res/drawable/bg_dialog.xml
deleted file mode 100644
index 470ebb3806..0000000000
--- a/app_ipc_monitoring/src/main/res/drawable/bg_dialog.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
diff --git a/app_ipc_monitoring/src/main/res/layout/dialog_autopilot_mode.xml b/app_ipc_monitoring/src/main/res/layout/dialog_autopilot_mode.xml
index b25a35f542..f1829fc2dc 100644
--- a/app_ipc_monitoring/src/main/res/layout/dialog_autopilot_mode.xml
+++ b/app_ipc_monitoring/src/main/res/layout/dialog_autopilot_mode.xml
@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@drawable/bg_dialog">
+ android:background="@drawable/bg_adas_dialog">
-
+ android:orientation="vertical">
+
+
+
+
+
+
diff --git a/app_ipc_monitoring/src/main/res/layout/layout_float.xml b/app_ipc_monitoring/src/main/res/layout/layout_float.xml
index 9cbebe07f8..7e199841eb 100644
--- a/app_ipc_monitoring/src/main/res/layout/layout_float.xml
+++ b/app_ipc_monitoring/src/main/res/layout/layout_float.xml
@@ -2,7 +2,7 @@
diff --git a/libraries/mogo-adas-backgrounder-permission/.gitignore b/libraries/mogo-adas-backgrounder-permission/.gitignore
new file mode 100644
index 0000000000..796b96d1c4
--- /dev/null
+++ b/libraries/mogo-adas-backgrounder-permission/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/libraries/mogo-adas-backgrounder-permission/README.md b/libraries/mogo-adas-backgrounder-permission/README.md
new file mode 100644
index 0000000000..2014927e77
--- /dev/null
+++ b/libraries/mogo-adas-backgrounder-permission/README.md
@@ -0,0 +1,463 @@
+#### 说明
+# ADAS LIB
+## 与工控机交互LIB
+
+# 使用方法参见【app_ipc_monitoring】中的代码
+
+## 可用接口
+~~~java
+ /**
+ * 设置多设备监听
+ *
+ * @param l 监听
+ */
+ AdasManager.getInstance().setOnMultiDeviceListener(OnMultiDeviceListener l);
+~~~
+~~~java
+ /**
+ * 设置工控机数据监听
+ *
+ * @param l 监听
+ */
+ AdasManager.getInstance().setOnAdasListener(OnAdasListener l);
+~~~
+~~~java
+ /**
+ * 创建一个连接
+ *
+ * @param options 连接参数
+ * @param onAdasConnectStatusListener 连接状态监听
+ */
+ AdasManager.getInstance().create(AdasOptions options, OnAdasConnectStatusListener onAdasConnectStatusListener);
+~~~
+~~~java
+ /**
+ * ADAS LIB 版本
+ *
+ * @return 版本
+ */
+ AdasManager.getInstance().getAdasVersion();
+~~~
+~~~java
+ /**
+ * 获取协议版本
+ *
+ * @return 版本
+ */
+ AdasManager.getInstance().getProtocolVersion();
+~~~
+~~~java
+ /**
+ * 获取工控机配置信息
+ *
+ * @return 配置信息 未连接为null 断开连接会清空
+ */
+ AdasManager.getInstance().getCarConfig();
+~~~
+~~~java
+ /**
+ * 连接工控机
+ */
+ AdasManager.getInstance().connect();
+~~~
+~~~java
+ /**
+ * 与工控机断开连接
+ */
+ AdasManager.getInstance().disconnect();
+~~~
+~~~java
+ /**
+ * 获取当前工控机的链接状态
+ *
+ * @return {@link Constants.IPC_CONNECTION_STATUS}
+ */
+ AdasManager.getInstance().getIpcConnectionStatus();
+~~~
+~~~java
+
+ /**
+ * Log是否开启打印
+ */
+ AdasManager.getInstance().setEnableLog(boolean isEnableLog);
+~~~
+~~~java
+ /**
+ * 系统命令请求, 比如系统重启,启用新镜像
+ *
+ * @param type SystemCmdType。SYSTEMCMD_REBOOT 重启所有节点
+ * SystemCmdType。SYSTEMCMD_EMPLOY_NEW_IMAGE 使用新镜像(推镜像)
+ * SystemCmdType。SYSTEMCMD_SHUT_DOWN 关机
+ * @return boolean
+ */
+ AdasManager.getInstance().sendSystemCmdReq(@NonNull MessagePad.SystemCmdType type);
+~~~
+~~~java
+ /**
+ * 解析工控机发送过来的数据
+ * 多设备时使用
+ *
+ * @param bytes 数据
+ */
+ AdasManager.getInstance().parseIPCData(byte[] bytes);
+~~~
+~~~java
+ /**
+ * 获取工控机链接配置
+ *
+ * @return 工控机链接参数
+ */
+ AdasManager.getInstance().getAdasOptions();
+~~~
+~~~java
+ /**
+ * 获取已经链接成功的工控机IP 未连接为null
+ *
+ * @return ip null:表示未连接
+ */
+ AdasManager.getInstance().getIpcConnectedIp();
+~~~
+~~~java
+ /**
+ * 获取已经链接成功的工控机端口
+ *
+ * @return 端口 未连接为默认端口
+ */
+ AdasManager.getInstance().getIpcConnectedPort();
+~~~
+~~~java
+
+ /**
+ * 自动驾驶设备基础信息应答
+ *
+ * @param sn SN
+ * @param environment 1: 研发环境, 2:测试环境, 3:生产环境 4:演示环境
+ * @return
+ */
+ AdasManager.getInstance().sendBasicInfoResp(@NonNull String sn, int environment);
+~~~
+~~~java
+ /**
+ * 设置自动驾驶模式 启动自动驾驶
+ *
+ * @param mode 1: enter autopilot mode, 0: quit autopilot mode
+ * @param source 命令来源: 0: pad模拟(模拟时routeInfo传null), 1: AICloud业务
+ * @param routeInfo 自动驾驶路径信息
+ * @return
+ */
+ AdasManager.getInstance().sendAutoPilotModeReq(int mode, int source, MessagePad.RouteInfo routeInfo);
+~~~
+~~~java
+ /**
+ * 设置演示模式
+ *
+ * @param enable 1: enable, 0: disable
+ * @return
+ */
+ AdasManager.getInstance().sendDemoModeReq(int enable);
+~~~
+~~~java
+ /**
+ * 车机基础信息请求
+ *
+ * @return
+ */
+ AdasManager.getInstance().sendCarConfigReq();
+~~~
+~~~java
+ /**
+ * 记录人工接管原因
+ *
+ * @param key bag key 唯一标识
+ * @param filename 文件路径
+ * @param reasonID 接管原因id
+ * @param reason 接管原因
+ * @return
+ */
+ AdasManager.getInstance().sendRecordCause(long key, @NonNull String filename, @NonNull String reasonID, @NonNull String reason);
+~~~
+~~~java
+ /**
+ * 同下
+ *
+ * @param id
+ * @param type
+ * @return
+ */
+ AdasManager.getInstance().startRecordPackage(int id, int type);
+~~~
+~~~java
+ /**
+ * 同下
+ *
+ * @param id
+ * @param type
+ * @return
+ */
+ AdasManager.getInstance().startRecordPackage(int id, int duration, int type);
+~~~
+~~~java
+ /**
+ * 同下
+ *
+ * @param id
+ * @param type
+ * @return
+ */
+
+ AdasManager.getInstance().stopRecordPackage(int id, int type);
+~~~
+~~~java
+ /**
+ * 数据采集请求 主动录制Bag包
+ *
+ * @param id 采集id
+ * @param duration 采集时间长
+ * @param type 采集类型, 1:badcase, 2: map; 3: rests
+ * @param isRecord 采集指令, true: 采集, false: 停止采集
+ * @param sustain 是否持续采集
+ * @return
+ */
+
+ AdasManager.getInstance().sendRecordData(int id, int duration, int type, boolean isRecord);
+~~~
+~~~java
+ /**
+ * 设置自动驾驶最大速度
+ *
+ * @param speedLimit 最大车辆速度 m/s
+ * @return
+ */
+ AdasManager.getInstance().sendAutopilotSpeedReq(double speedLimit);
+~~~
+~~~java
+ /**
+ * 发送红绿灯数据到工控机
+ *
+ * @param crossID roadID
+ * @param latitude
+ * @param longitude
+ * @param heading 红绿灯方向
+ * @param direction 路的航向角
+ * @param lightId 红绿灯ID
+ * @param laneNo 车道号
+ * @param arrowNo 当前车道对应地面要素转向
+ * @param flashYellow 黄灯总时间
+ * @param laneDetail 灯态具体信息
+ * @return
+ */
+ AdasManager.getInstance().sendTrafficLightData(@NonNull String crossID, double latitude, double longitude, @NonNull String heading, @NonNull String direction, int lightId, int laneNo, int arrowNo, int flashYellow, MessagePad.TrafficLightDetail laneDetail);
+~~~
+~~~java
+ /**
+ * 自动驾驶路径请求
+ *
+ * @return
+ */
+ AdasManager.getInstance().sendGlobalPathReq();
+~~~
+~~~java
+ /**
+ * 获取工控机固定IP列表
+ *
+ * @return 返回默认工控机IP列表
+ */
+ AdasManager.getInstance().getIPCFixationIPList(Context context);
+~~~
+~~~java
+ /**
+ * 增加工控机固定IP
+ *
+ * @param ipcIP IP
+ */
+ AdasManager.getInstance().addIPCFixationIP(Context context, String ipcIP);
+~~~
+~~~java
+ /**
+ * 删除指定的工控机固定IP
+ *
+ * @param ipcIP IP
+ */
+ AdasManager.getInstance().delIPCFixationIP(Context context, String ipcIP);
+~~~
+~~~java
+ /**
+ * 删除所有工控机固定IP
+ */
+ AdasManager.getInstance().delIPCFixationIP(Context context);
+~~~
+
+
+## OnAdasListener
+### 工控机数据回调
+#### 回调中对象的字段详情参见各个proto文件
+~~~java
+ /**
+ * 自动驾驶局部轨迹 前车引导线
+ *
+ * @param header 头
+ * @param trajectory 数据
+ */
+ void onTrajectory(MessagePad.Header header, MessagePad.Trajectory trajectory);
+~~~
+~~~java
+ /**
+ * 障碍物 他车数据
+ *
+ * @param header 头
+ * @param trackedObjects 数据
+ */
+ void onTrackedObjects(MessagePad.Header header, MessagePad.TrackedObjects trackedObjects);
+~~~
+~~~java
+ /**
+ * 惯导信息
+ *
+ * @param header 头
+ * @param gnssInfo 数据
+ */
+ void onGnssInfo(MessagePad.Header header, MessagePad.GnssInfo gnssInfo);
+~~~
+~~~java
+ /**
+ * 底盘信息, 透传底盘状态,pb参考底盘
+ *
+ * @param header 头
+ * @param vehicleState 数据
+ */
+ void onVehicleState(MessagePad.Header header, VehicleStateOuterClass.VehicleState vehicleState);
+~~~
+~~~java
+ /**
+ * 自动驾驶状态
+ *
+ * @param header 头
+ * @param autopilotState 数据
+ */
+ void onAutopilotState(MessagePad.Header header, MessagePad.AutopilotState autopilotState);
+~~~
+~~~java
+ /**
+ * 监控事件报告
+ *
+ * @param header 头
+ * @param mogoReportMessage 数据
+ */
+ void onReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage mogoReportMessage);
+~~~
+~~~java
+ /**
+ * 感知红绿灯
+ *
+ * @param header 头
+ * @param trafficLights 感知红绿灯
+ */
+ void onPerceptionTrafficLight(MessagePad.Header header, TrafficLightOuterClass.TrafficLights trafficLights);
+~~~
+~~~java
+ /**
+ * 他车轨迹预测
+ *
+ * @param header 头
+ * @param predictionObjects 他车轨迹预测数据
+ */
+ void onPredictionObstacleTrajectory(MessagePad.Header header, Prediction.mPredictionObjects predictionObjects);
+~~~
+~~~java
+ /**
+ * 自动驾驶设备基础信息请求
+ *
+ * @param header 头
+ * @param basicInfoReq 数据 目前没有任何参数
+ */
+ void onBasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq basicInfoReq);
+~~~
+~~~java
+ /**
+ * 车机基础信息应答
+ *
+ * @param header 头
+ * @param carConfigResp 数据
+ */
+ void onCarConfigResp(MessagePad.Header header, MessagePad.CarConfigResp carConfigResp);
+~~~
+~~~java
+ /**
+ * 数据采集结果
+ *
+ * @param header 头
+ * @param recordPanel 数据
+ */
+ void onRecordResult(MessagePad.Header header, RecordPanelOuterClass.RecordPanel recordPanel);
+~~~
+~~~java
+ /**
+ * 自动驾驶路径应答
+ *
+ * @param header 头
+ * @param globalPathResp 数据
+ */
+ void onGlobalPathResp(MessagePad.Header header, MessagePad.GlobalPathResp globalPathResp);
+~~~
+~~~java
+ /**
+ * 报警信息
+ * 暂时保留,目前没有使用
+ *
+ * @param header 头
+ * @param warn 数据
+ */
+ @Deprecated
+ void onWarn(MessagePad.Header header, MessagePad.Warn warn);
+~~~
+~~~java
+ /**
+ * 到站提醒 自动驾驶站点
+ *
+ * @param header 头
+ * @param arrivalNotification 数据
+ */
+ void onArrivalNotification(MessagePad.Header header, MessagePad.ArrivalNotification arrivalNotification);
+~~~
+~~~java
+ /**
+ * 向IPC发送命令返回结果
+ *
+ * @param info
+ */
+ void onSSHResult(SSHResult info);
+~~~
+~~~java
+ /**
+ * 数据错误
+ *
+ * @param status 错误原因
+ * @param bytes 原始数据
+ */
+ void onError(ProtocolStatus status, byte[] bytes);
+~~~
+
+## OnAdasConnectStatusListener
+### 连接状态监听
+~~~java
+ /**
+ * 与工控机链接状态变化
+ *
+ * @param ipcConnectionStatus {@link Constants.IPC_CONNECTION_STATUS}
+ * @param reason 连接信息 需要判null
+ * 如果ipcConnectionStatus==Constants.IPC_CONNECTION_STATUS.DISCONNECTED&&reason==null 表示主动断开连接
+ */
+ void onConnectionIPCStatus(@Define.IPCConnectionStatus int ipcConnectionStatus, @Nullable String reason);
+~~~
+
+## OnMultiDeviceListener
+### 多设备链接监听
+~~~java
+ /**
+ * 转发工控机消息
+ * 如果是客户端此回调不会被调用
+ *
+ * @param bytes 数据
+ */
+ void onForwardingIPCMessage(byte[] bytes);
+~~~
\ No newline at end of file
diff --git a/libraries/mogo-adas-backgrounder-permission/build.gradle b/libraries/mogo-adas-backgrounder-permission/build.gradle
new file mode 100644
index 0000000000..c58c14698e
--- /dev/null
+++ b/libraries/mogo-adas-backgrounder-permission/build.gradle
@@ -0,0 +1,36 @@
+plugins {
+ id 'com.android.library'
+}
+
+android {
+ compileSdkVersion rootProject.ext.android.compileSdkVersion
+ // buildToolsVersion rootProject.ext.android.buildToolsVersion
+
+ defaultConfig {
+ minSdkVersion 21
+ targetSdkVersion rootProject.ext.android.targetSdkVersion
+// versionCode Integer.valueOf(VERSION_CODE)
+// versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION")
+//
+// buildConfigField "String", "AP_VERSION", "\"${AP_VERSION}\""
+ versionCode rootProject.versionCode as int
+ versionName rootProject.versionName
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles 'consumer-rules.pro'
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation rootProject.ext.dependencies.androidxappcompat
+
+}
diff --git a/libraries/mogo-adas-backgrounder-permission/consumer-rules.pro b/libraries/mogo-adas-backgrounder-permission/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/mogo-adas-backgrounder-permission/gradle.properties b/libraries/mogo-adas-backgrounder-permission/gradle.properties
new file mode 100644
index 0000000000..0d60ce4aee
--- /dev/null
+++ b/libraries/mogo-adas-backgrounder-permission/gradle.properties
@@ -0,0 +1,3 @@
+GROUP=com.mogo.adas
+POM_ARTIFACT_ID=mogo-adas
+VERSION_CODE=1
\ No newline at end of file
diff --git a/libraries/mogo-adas-backgrounder-permission/proguard-rules.pro b/libraries/mogo-adas-backgrounder-permission/proguard-rules.pro
new file mode 100644
index 0000000000..f10712073b
--- /dev/null
+++ b/libraries/mogo-adas-backgrounder-permission/proguard-rules.pro
@@ -0,0 +1,26 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+#-----MogoMap-----
+-keep class com.mogo.map.MogoNavi{
+ private ();
+}
diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/AndroidManifest.xml b/libraries/mogo-adas-backgrounder-permission/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..da52cf04c3
--- /dev/null
+++ b/libraries/mogo-adas-backgrounder-permission/src/main/AndroidManifest.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/java/com/zhidao/support/adas/high/permission/BackgrounderPermission.java b/libraries/mogo-adas-backgrounder-permission/src/main/java/com/zhidao/support/adas/high/permission/BackgrounderPermission.java
new file mode 100644
index 0000000000..8f3436b394
--- /dev/null
+++ b/libraries/mogo-adas-backgrounder-permission/src/main/java/com/zhidao/support/adas/high/permission/BackgrounderPermission.java
@@ -0,0 +1,111 @@
+package com.zhidao.support.adas.high.permission;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.Uri;
+import android.os.PowerManager;
+import android.provider.Settings;
+import android.util.Log;
+
+import com.zhidao.support.adas.high.permission.dialog.PermissionLongBackgroundRunningDialog;
+
+
+/**
+ * 长时间后台运行权限检查
+ */
+public class BackgrounderPermission {
+
+
+
+ public void showPermissionLongBackgroundRunningDialog(Context context) {
+ Intent intent = new Intent(context, PermissionLongBackgroundRunningDialog.class);
+ context.startActivity(intent);
+
+ }
+
+
+ /**
+ * 获取当前是否开启电池优化
+ *
+ * @param context 上下文
+ * @return 否在设备的电源白名单上 true 表示未优化
+ */
+ public boolean isIgnoringBatteryOptimizations(Context context) {
+ boolean isIgnoring = false;
+ PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
+ if (powerManager != null) {
+ isIgnoring = powerManager.isIgnoringBatteryOptimizations(context.getPackageName());
+ }
+ return isIgnoring;
+ }
+
+ /**
+ * 申请 关闭电池优化权限
+ *
+ * @param context
+ */
+ public void requestIgnoreBatteryOptimizations(Context context) {
+ Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
+ intent.setData(Uri.parse("package:" + context.getPackageName()));
+ context.startActivity(intent);
+ }
+
+ /**
+ * 是否忽略计费网络限制
+ * 后台运行时网络限制
+ *
+ * @param context
+ * @return
+ */
+
+ public boolean isIgnoringMeteredNetworkRestrictions(Context context) {
+ ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ // 检查设备是否在计费网络
+// if (connMgr.isActiveNetworkMetered()) {
+ // Checks user’s Data Saver settings.
+ switch (connMgr.getRestrictBackgroundStatus()) {
+ case ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED:
+ // 用户已为此应用启用流量节省程序。应用应努力限制前台流量消耗,并妥善处理后台流量消耗限制。
+ Log.i("Permission", "用户已为此应用启用流量节省程序。应用应努力限制前台流量消耗,并妥善处理后台流量消耗限制。");
+ return false;
+ case ConnectivityManager.RESTRICT_BACKGROUND_STATUS_WHITELISTED:
+ // 用户已启用流量节省程序,但应用在白名单中。应用应努力限制前台和后台流量消耗。
+ Log.i("Permission", "用户已启用流量节省程序,但应用在白名单中。应用应努力限制前台和后台流量消耗。");
+ return false;
+ case ConnectivityManager.RESTRICT_BACKGROUND_STATUS_DISABLED:
+ // 流量节省程序已停用。
+ Log.i("Permission", "流量节省程序已停用。");
+ return true;
+ }
+// } else {
+// // 设备不在计费网络,为所欲为
+// Log.i("Permission","设备不在计费网络,为所欲为");
+// return true;
+// }
+ Log.i("dddd", "其他");
+ return false;
+ }
+
+ /**
+ * 除非应用的核心功能受到不利影响,否则 Google Play 政策禁止应用请求直接豁免 Android 6.0+ 中的电源管理功能(低电耗模式和应用待机模式)
+ */
+ public static void requestAddDataSaverWhite(Context context) {
+// ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+// if (connMgr != null && connMgr.getRestrictBackgroundStatus() == ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED) {
+ Intent intent = new Intent(Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS);
+ intent.setData(Uri.parse("package:" + context.getPackageName()));
+ context.startActivity(intent);
+// }
+ }
+
+ /**
+ * 是否允许长时间后台运行
+ *
+ * @param context 上下文
+ * @return
+ */
+ public boolean isPermissionLongBackgroundRunning(Context context) {
+ return isIgnoringBatteryOptimizations(context) && isIgnoringMeteredNetworkRestrictions(context);
+ }
+}
diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/java/com/zhidao/support/adas/high/permission/dialog/PermissionLongBackgroundRunningDialog.java b/libraries/mogo-adas-backgrounder-permission/src/main/java/com/zhidao/support/adas/high/permission/dialog/PermissionLongBackgroundRunningDialog.java
new file mode 100644
index 0000000000..853c043a76
--- /dev/null
+++ b/libraries/mogo-adas-backgrounder-permission/src/main/java/com/zhidao/support/adas/high/permission/dialog/PermissionLongBackgroundRunningDialog.java
@@ -0,0 +1,41 @@
+package com.zhidao.support.adas.high.permission.dialog;
+
+import android.os.Bundle;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.zhidao.support.adas.high.permission.R;
+
+/**
+ * 数据用量及电池优化 权限申请
+ * 高版本Android系统会针对熄屏、休眠或后台 对电池WiFi等进行优化,长时间网络可能会断开连接
+ */
+public class PermissionLongBackgroundRunningDialog extends AppCompatActivity {
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ overridePendingTransition(R.anim.dialog_in, R.anim.dialog_out);
+ setContentView(R.layout.dialog_adas_permission_long_background_running);
+// //设置弹出窗口与屏幕对齐
+// Window win = this.getWindow();
+// int density = (int) (getResources().getDisplayMetrics().density + 0.5f);
+////设置内边距,这里设置为10dp
+// win.getDecorView().setPadding(10 * density, 10 * density, 10 * density, 10 * density);
+// WindowManager.LayoutParams lp = win.getAttributes();
+////设置窗口宽度
+// lp.width = WindowManager.LayoutParams.MATCH_PARENT;
+////设置窗口高度
+// lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
+////设置Dialog位置
+// lp.gravity = Gravity.TOP;
+// win.setAttributes(lp);
+ }
+
+ @Override
+ public void finish() {
+ super.finish();
+ //在此时设置转场动画
+ overridePendingTransition(R.anim.dialog_out, R.anim.dialog_in);
+ }
+}
diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/res/anim/dialog_in.xml b/libraries/mogo-adas-backgrounder-permission/src/main/res/anim/dialog_in.xml
new file mode 100644
index 0000000000..f50618256d
--- /dev/null
+++ b/libraries/mogo-adas-backgrounder-permission/src/main/res/anim/dialog_in.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/res/anim/dialog_out.xml b/libraries/mogo-adas-backgrounder-permission/src/main/res/anim/dialog_out.xml
new file mode 100644
index 0000000000..8134cd1490
--- /dev/null
+++ b/libraries/mogo-adas-backgrounder-permission/src/main/res/anim/dialog_out.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
diff --git a/app_ipc_monitoring/src/main/res/drawable/bg_float.xml b/libraries/mogo-adas-backgrounder-permission/src/main/res/drawable/bg_adas_dialog.xml
similarity index 87%
rename from app_ipc_monitoring/src/main/res/drawable/bg_float.xml
rename to libraries/mogo-adas-backgrounder-permission/src/main/res/drawable/bg_adas_dialog.xml
index eeb2ab95b9..cbfb69f454 100644
--- a/app_ipc_monitoring/src/main/res/drawable/bg_float.xml
+++ b/libraries/mogo-adas-backgrounder-permission/src/main/res/drawable/bg_adas_dialog.xml
@@ -3,7 +3,7 @@
+ android:color="#81666666" />
diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/res/layout/dialog_adas_permission_long_background_running.xml b/libraries/mogo-adas-backgrounder-permission/src/main/res/layout/dialog_adas_permission_long_background_running.xml
new file mode 100644
index 0000000000..63b16efa72
--- /dev/null
+++ b/libraries/mogo-adas-backgrounder-permission/src/main/res/layout/dialog_adas_permission_long_background_running.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/res/values/strings.xml b/libraries/mogo-adas-backgrounder-permission/src/main/res/values/strings.xml
new file mode 100644
index 0000000000..50b092d93d
--- /dev/null
+++ b/libraries/mogo-adas-backgrounder-permission/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ adas-backgrounder-permission
+
diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/res/values/styles.xml b/libraries/mogo-adas-backgrounder-permission/src/main/res/values/styles.xml
new file mode 100644
index 0000000000..e90d3cb772
--- /dev/null
+++ b/libraries/mogo-adas-backgrounder-permission/src/main/res/values/styles.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/settings.gradle b/settings.gradle
index f6bf16a6d6..ee421450e5 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -62,6 +62,7 @@ include ':libraries:mogo-map-api'
include ':libraries:mogo-map'
include ':libraries:mogo-adas'
include ':libraries:mogo-adas-data'
+include ':libraries:mogo-adas-backgrounder-permission'
// OLD业务模块
include ':modules:mogo-module-common'