diff --git a/.gradle/5.6.4/executionHistory/executionHistory.bin b/.gradle/5.6.4/executionHistory/executionHistory.bin
index 53fe86a..c04208a 100644
Binary files a/.gradle/5.6.4/executionHistory/executionHistory.bin and b/.gradle/5.6.4/executionHistory/executionHistory.bin differ
diff --git a/.gradle/5.6.4/executionHistory/executionHistory.lock b/.gradle/5.6.4/executionHistory/executionHistory.lock
index 492cf58..074327b 100644
Binary files a/.gradle/5.6.4/executionHistory/executionHistory.lock and b/.gradle/5.6.4/executionHistory/executionHistory.lock differ
diff --git a/.gradle/5.6.4/fileHashes/fileHashes.bin b/.gradle/5.6.4/fileHashes/fileHashes.bin
index cdb6df4..6c57fab 100644
Binary files a/.gradle/5.6.4/fileHashes/fileHashes.bin and b/.gradle/5.6.4/fileHashes/fileHashes.bin differ
diff --git a/.gradle/5.6.4/fileHashes/fileHashes.lock b/.gradle/5.6.4/fileHashes/fileHashes.lock
index ffc0cec..288ab31 100644
Binary files a/.gradle/5.6.4/fileHashes/fileHashes.lock and b/.gradle/5.6.4/fileHashes/fileHashes.lock differ
diff --git a/.gradle/5.6.4/fileHashes/resourceHashesCache.bin b/.gradle/5.6.4/fileHashes/resourceHashesCache.bin
index b17a32d..a972c97 100644
Binary files a/.gradle/5.6.4/fileHashes/resourceHashesCache.bin and b/.gradle/5.6.4/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/5.6.4/javaCompile/classAnalysis.bin b/.gradle/5.6.4/javaCompile/classAnalysis.bin
index e44971f..511d57d 100644
Binary files a/.gradle/5.6.4/javaCompile/classAnalysis.bin and b/.gradle/5.6.4/javaCompile/classAnalysis.bin differ
diff --git a/.gradle/5.6.4/javaCompile/jarAnalysis.bin b/.gradle/5.6.4/javaCompile/jarAnalysis.bin
index bbb6949..9516cd5 100644
Binary files a/.gradle/5.6.4/javaCompile/jarAnalysis.bin and b/.gradle/5.6.4/javaCompile/jarAnalysis.bin differ
diff --git a/.gradle/5.6.4/javaCompile/javaCompile.lock b/.gradle/5.6.4/javaCompile/javaCompile.lock
index 65e03c9..db95d70 100644
Binary files a/.gradle/5.6.4/javaCompile/javaCompile.lock and b/.gradle/5.6.4/javaCompile/javaCompile.lock differ
diff --git a/.gradle/5.6.4/javaCompile/taskHistory.bin b/.gradle/5.6.4/javaCompile/taskHistory.bin
index 7c73390..5444142 100644
Binary files a/.gradle/5.6.4/javaCompile/taskHistory.bin and b/.gradle/5.6.4/javaCompile/taskHistory.bin differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 4b53651..4788cbb 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin
index 7d219cb..743c8d3 100644
Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/.idea/libraries/Gradle__com_amitshekhar_android_debug_db_base_1_0_6_aar.xml b/.idea/libraries/Gradle__com_amitshekhar_android_debug_db_base_1_0_6_aar.xml
index 76f55f7..f3b8f0d 100644
--- a/.idea/libraries/Gradle__com_amitshekhar_android_debug_db_base_1_0_6_aar.xml
+++ b/.idea/libraries/Gradle__com_amitshekhar_android_debug_db_base_1_0_6_aar.xml
@@ -13,6 +13,9 @@
+
+
+
diff --git a/.idea/libraries/Gradle__com_facebook_stetho_stetho_1_5_1_aar.xml b/.idea/libraries/Gradle__com_facebook_stetho_stetho_1_5_1_aar.xml
index e9d38d5..d906fe9 100644
--- a/.idea/libraries/Gradle__com_facebook_stetho_stetho_1_5_1_aar.xml
+++ b/.idea/libraries/Gradle__com_facebook_stetho_stetho_1_5_1_aar.xml
@@ -5,6 +5,7 @@
+
@@ -19,6 +20,9 @@
+
+
+
diff --git a/.idea/libraries/Gradle__com_github_yuweiguocn_GreenDaoUpgradeHelper_v2_2_1_aar.xml b/.idea/libraries/Gradle__com_github_yuweiguocn_GreenDaoUpgradeHelper_v2_2_1_aar.xml
index 89814a9..84a76eb 100644
--- a/.idea/libraries/Gradle__com_github_yuweiguocn_GreenDaoUpgradeHelper_v2_2_1_aar.xml
+++ b/.idea/libraries/Gradle__com_github_yuweiguocn_GreenDaoUpgradeHelper_v2_2_1_aar.xml
@@ -13,6 +13,9 @@
+
+
+
diff --git a/.idea/libraries/Gradle__com_orhanobut_logger_2_2_0_aar.xml b/.idea/libraries/Gradle__com_orhanobut_logger_2_2_0_aar.xml
index 4904042..947cd4e 100644
--- a/.idea/libraries/Gradle__com_orhanobut_logger_2_2_0_aar.xml
+++ b/.idea/libraries/Gradle__com_orhanobut_logger_2_2_0_aar.xml
@@ -13,6 +13,9 @@
+
+
+
diff --git a/.idea/modules/app/taxiapp-ktl.app.iml b/.idea/modules/app/taxiapp-ktl.app.iml
index aab6b96..2f6ae57 100644
--- a/.idea/modules/app/taxiapp-ktl.app.iml
+++ b/.idea/modules/app/taxiapp-ktl.app.iml
@@ -31,7 +31,7 @@
-
+
@@ -95,10 +95,10 @@
+
+
-
-
diff --git a/.idea/modules/kurolibrary/taxiapp-ktl.kurolibrary.iml b/.idea/modules/kurolibrary/taxiapp-ktl.kurolibrary.iml
index 9bd386d..ead3360 100644
--- a/.idea/modules/kurolibrary/taxiapp-ktl.kurolibrary.iml
+++ b/.idea/modules/kurolibrary/taxiapp-ktl.kurolibrary.iml
@@ -87,11 +87,11 @@
-
-
+
-
+
+
diff --git a/.idea/modules/kurotool/taxiapp-ktl.kurotool.iml b/.idea/modules/kurotool/taxiapp-ktl.kurotool.iml
index 6542496..516480a 100644
--- a/.idea/modules/kurotool/taxiapp-ktl.kurotool.iml
+++ b/.idea/modules/kurotool/taxiapp-ktl.kurotool.iml
@@ -90,10 +90,10 @@
-
-
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 5a0d478..c1f02aa 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -21,8 +21,8 @@ android {
applicationId "net.sysolution.taxiapp"
minSdkVersion 21
targetSdkVersion 29
- versionCode 238
- versionName "3.3.3-beta26.3.9.3.95-release"
+ versionCode 240
+ versionName "3.3.3-beta26.3.9.97-debug"
//alphaxx - 预览版本,不会对外发布,由测试人员测试,会有很多bug
//Betaxx - 公开测试版本,会发给其他工作人员,会有较多版本
@@ -56,6 +56,9 @@ android {
26.3.8.6.9 长时间未收到心跳重连的等待时间改成38s
26.3.9 更改了webSocket的连接保活代码,gps坐标记录两个点的距离由原来的50米记录一次改为20米记录一次
3.3.3-beta26.3.9.3.94 新增播放日志开关,gps开关查询,直接清除所有广告功能
+ 3.3.3-beta26.3.9.3.95 修复日志重复上传问题
+ 26.3.9.96 播放时长为广告素材的播放时长
+ 26.3.9.97 记录taxiApp当天的运行时间
**/
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/Configurations.java b/app/src/main/java/cn/trans88/taxiappkotlin/Configurations.java
index 886182e..03da3a6 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/Configurations.java
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/Configurations.java
@@ -351,6 +351,51 @@ public class Configurations {
context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putBoolean("isCustomLogo", b).apply();
}
+ /**
+ * taxiApp开始运行时间
+ * @return
+ */
+ public long startRunTime(){
+ return context.getSharedPreferences("config", Context.MODE_PRIVATE).getLong("startRunTime",0L);
+ }
+
+ public void startRunTimeSave(Long startTime){
+ context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putLong("startRunTime", startTime).apply();
+ }
+
+ /**
+ * taxiApp结束运行时间
+ * @return
+ */
+ public long endRunTime(){
+ return context.getSharedPreferences("config", Context.MODE_PRIVATE).getLong("endRunTime",0L);
+ }
+
+ public void endRunTimeSave(Long startTime){
+ context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putLong("endRunTime", startTime).apply();
+ }
+
+ /**
+ * taxiApp当天总的运行时间
+ * @return
+ */
+ public long sumRunTime(){
+ return context.getSharedPreferences("config", Context.MODE_PRIVATE).getLong("sumRunTime",0L);
+ }
+
+ public void sumRunTimeSave(Long startTime){
+ context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putLong("sumRunTime", startTime).apply();
+ }
+
+ public String runtimeJsonString(){
+
+ return context.getSharedPreferences("config", Context.MODE_PRIVATE).getString("runtimeJsonString", "");
+ }
+
+ public void runtimeJsonStringSave(String s){
+ context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putString("runtimeJsonString", s).apply();
+ }
+
}
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/LogSummary.kt b/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/LogSummary.kt
new file mode 100644
index 0000000..f539d63
--- /dev/null
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/LogSummary.kt
@@ -0,0 +1,13 @@
+package cn.trans88.taxiappkotlin.logic.model
+
+/**
+ *
+ * @Author: LJH
+ * @Time: 2023/11/16
+ * @description:
+ */
+data class LogSummary(
+ val ad_id: String,
+ val play_num:Int,
+ val duration:Long
+)
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/LogSummaryJson.kt b/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/LogSummaryJson.kt
new file mode 100644
index 0000000..d2093db
--- /dev/null
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/LogSummaryJson.kt
@@ -0,0 +1,9 @@
+package cn.trans88.taxiappkotlin.logic.model
+
+/**
+ *
+ * @Author: LJH
+ * @Time: 2023/11/16
+ * @description:
+ */
+data class LogSummaryJson(val begin_play_ts:Long,val end_play_ts:Long,val summary:List)
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/RuntimeJson.kt b/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/RuntimeJson.kt
new file mode 100644
index 0000000..d4fe9ab
--- /dev/null
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/RuntimeJson.kt
@@ -0,0 +1,13 @@
+package cn.trans88.taxiappkotlin.logic.model
+
+/**
+ *
+ * @Author: LJH
+ * @Time: 2023/11/16
+ * @description:上报运行时长的Json Model
+ */
+data class RuntimeJson(
+ val device_id:String,
+ val runtime:Long,
+ val create_at:Long
+)
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/TodayRunTime.java b/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/TodayRunTime.java
new file mode 100644
index 0000000..3decfc9
--- /dev/null
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/TodayRunTime.java
@@ -0,0 +1,18 @@
+package cn.trans88.taxiappkotlin.logic.model;
+
+/**
+ * @Author: LJH
+ * @Time: 2023/10/11
+ * @description:
+ */
+public class TodayRunTime extends SanleResponse{
+ private long runtime = 0L;
+
+ public long getRuntime() {
+ return runtime;
+ }
+
+ public void setRuntime(long runtime) {
+ this.runtime = runtime;
+ }
+}
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ConnManger.kt b/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ConnManger.kt
index 4497fbc..f2f365f 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ConnManger.kt
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ConnManger.kt
@@ -40,6 +40,7 @@ import java.io.File
import java.io.IOException
import java.util.*
import java.util.concurrent.ThreadPoolExecutor
+import java.util.stream.Collectors
/**
* @author TRS
@@ -447,6 +448,7 @@ object ConnManger {
YoungUtil.YoungLog("准备上传坐标")
YoungUtil.YoungLog("sendLocation:${requestJson}")
val request: Request = Request.Builder()
+ // .url("http://192.168.1.127:2346/postGpsLocationLog") //要访问的链接
.url(Configurations.config(TaxiApp.instance()).logServiceUrl() + "postGpsLocationLog") //要访问的链接
.addHeader("Authorization", "Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
.post(body)
@@ -584,6 +586,7 @@ object ConnManger {
YoungUtil.YoungLog("准备获取播放的总次数")
val request: Request = Request.Builder()
// .url("http://avhipxml.beesnat.com/v1/cms/groupAd/${advertise.ad_id}/AdCount") //要访问的链接
+// .url("http://192.168.1.141/v1/cms/groupAd/AdCount") //要访问的链接
.url("${baseUrl}/v1/cms/groupAd/${advertise.ad_id}/AdCount") //要访问的链接
.addHeader("Authorization", "Bearer ${Configurations.config(TaxiApp.instance()).registerToken()}")
.build()
@@ -676,6 +679,110 @@ object ConnManger {
}
+ /**
+ * 优化方案,上传日志概要
+ */
+ fun sendLogsSummary(){
+ YoungUtil.YoungLog("sendLogger in Thread is ${Looper.getMainLooper().thread === Thread.currentThread()}")
+ val playLoggers = DaoUtil.getPlayLoggers()
+ if (playLoggers.isNotEmpty()) {
+ //#edit by ljh @2023/6/5 改成大批量看是否能减小流量消耗
+ val requestJson = ProcessingCommands.gson.toJson(playLoggers)
+
+ for (playLogger in playLoggers) {
+ DaoUtil.getPlayLogger().delete(playLogger)
+ }
+
+ val okHttpClient = OkHttpClient()
+ YoungUtil.YoungLog("准备上传日志")
+ val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
+ val body = RequestBody.create(parse, requestJson)
+ YoungUtil.YoungLog("sendLogger:${requestJson}")
+ val request: Request = Request.Builder()
+ .url(Configurations.config(TaxiApp.instance()).logServiceUrl() + "postPlayerLog") //要访问的链接
+ .addHeader("Authorization", "Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
+ .addHeader("Accept-Encoding", "gzip")
+ .post(body)
+ .build()
+ val call = okHttpClient.newCall(request)
+ call.enqueue(object : Callback {
+
+ override fun onFailure(call: Call, e: IOException) {
+ YoungUtil.YoungLog("上传日志失败:${e.message}")
+ }
+
+ override fun onResponse(call: Call, response: Response) {
+ YoungUtil.YoungLog("上传日志成功:${response.message},response isSuccessful ${response.isSuccessful}${response.code}")
+
+// if (response.code == 200) {
+// //#edit by ljh @2023/6/5 删除批量上传的日志
+// DaoUtil.getPlayLogger().deleteAll()
+// }
+ "删除已上传的日志".logd()
+ }
+ })
+ }
+
+ }
+
+ private fun getLogSummaryJson(){
+ val playLoggers = DaoUtil.getPlayLoggers()
+ val maxEndPlayTs = playLoggers.map {
+ it.end_play_ts
+ }.max()
+ val minBeginPlayTs = playLoggers.map {
+ it.begin_play_ts
+ }.min()
+
+ "开始播放时间:$minBeginPlayTs,最后一条日志的播放时间:$maxEndPlayTs".loge()
+ if (playLoggers.isNotEmpty()) {
+ for (playLogger in playLoggers) {
+ DaoUtil.getPlayLogger().delete(playLogger)
+ }
+
+ }
+ }
+
+ /**
+ * 上报运行时长
+ */
+ fun sendRuntimeToWeb(){
+ val jsonStr = Configurations.config(taxiApp).runtimeJsonString() ?: ""
+ val okHttpClient = OkHttpClient()
+ YoungUtil.YoungLog("准备上报运行时长")
+ val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
+ val body = RequestBody.create(parse, jsonStr)
+ YoungUtil.YoungLog("runtimeJsonString:${jsonStr}")
+ val request: Request = Request.Builder()
+ .url(Configurations.config(TaxiApp.instance()).logServiceUrl() + "postRunningTimeLog") //要访问的链接
+ .addHeader("Authorization", "Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
+ .addHeader("Accept-Encoding", "gzip")
+ .post(body)
+ .build()
+ val call = okHttpClient.newCall(request)
+ call.enqueue(object : Callback {
+
+ override fun onFailure(call: Call, e: IOException) {
+ YoungUtil.YoungLog("上传运行时长失败:${e.message}")
+ Timer().schedule(object :TimerTask(){
+ override fun run() {
+ "重新上报运行时长".loge()
+ sendRuntimeToWeb()
+ }
+ },5000)
+ }
+
+ override fun onResponse(call: Call, response: Response) {
+ YoungUtil.YoungLog("上传运行时长成功:${response.message},response isSuccessful ${response.isSuccessful}${response.code}")
+ if (response.code == 200) {
+ "清除上传成功的运行时长数据".loge()
+ Configurations.config(taxiApp).runtimeJsonStringSave("")
+ }
+ }
+ })
+
+ }
+
/**
* 发送播放日志
*/
@@ -725,6 +832,7 @@ object ConnManger {
})
}
+
/**
* 发送异常
*/
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/JoeyDownloadManager.java b/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/JoeyDownloadManager.java
index 3751020..eea0471 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/JoeyDownloadManager.java
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/JoeyDownloadManager.java
@@ -39,7 +39,7 @@ public class JoeyDownloadManager {
private static BusCallback busCallback;
private static IPlay iPlay;
//edit by ljh 2022/11/29
- private static final int RETRY_TIMES = 120;
+ private static final int RETRY_TIMES = 600;
private static int downloadCount =100;//重试的次数
private static Application app;
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ProcessingCommands.kt b/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ProcessingCommands.kt
index 2f2410e..bc05868 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ProcessingCommands.kt
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ProcessingCommands.kt
@@ -86,6 +86,7 @@ object ProcessingCommands {
"get_player_log_state" -> getLoggerSwitch(task,baseTask.type)
//获取gps日志开关状态
"get_gps_state" -> getGpsSwitch(task,baseTask.type)
+ "get_today_runtime" -> getTodayRuntime(task,baseTask.type)
//直接清空所有广告
"clear_ads" -> clearAdvertises(task,baseTask.type)
"get_log_file_list" -> getLogFilesAllName(task,baseTask.type)
@@ -194,6 +195,26 @@ object ProcessingCommands {
send(response)
}
+ /**
+ * 实时获取当天taixApp运行时间
+ */
+ private fun getTodayRuntime(task: String, type: String) {
+ val baseResponse = gson.fromJson(task)
+ val sanleResponse = TodayRunTime()
+ val startRuntime = Configurations.config(TaxiApp.instance()).startRunTime()
+ val endRuntime = Configurations.config(TaxiApp.instance()).endRunTime()
+ val sumRuntime = Configurations.config(TaxiApp.instance()).sumRunTime()
+ val todayRuntime = endRuntime - startRuntime + sumRuntime
+ "getTodayRuntime-->当前taxiApp运行时间:$todayRuntime".logd()
+
+ sanleResponse.type = type
+ sanleResponse.id = baseResponse.id
+ sanleResponse.task_id = baseResponse.task_id
+ sanleResponse.runtime = todayRuntime
+ val response = gson.toJson(sanleResponse)
+ send(response)
+ }
+
/**
* 设置是否上传播放日志
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayActivity.kt b/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayActivity.kt
index 1bd1736..280b0b7 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayActivity.kt
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayActivity.kt
@@ -33,12 +33,15 @@ import cn.trans88.taxiappkotlin.logic.dao.PlayLoggerDao
import cn.trans88.taxiappkotlin.logic.gps.GpsReceiver
import cn.trans88.taxiappkotlin.logic.model.Advertise
import cn.trans88.taxiappkotlin.logic.model.Location
+import cn.trans88.taxiappkotlin.logic.model.RuntimeJson
import cn.trans88.taxiappkotlin.logic.network.*
import cn.trans88.taxiappkotlin.play.RefreshPlayer
import cn.trans88.taxiappkotlin.ui.advertise.AdvertiseType
import cn.trans88.taxiappkotlin.ui.broadcaskReceiver.BusCallback
import cn.trans88.taxiappkotlin.ui.broadcaskReceiver.BusReceiver
import cn.trans88.taxiappkotlin.ui.broadcaskReceiver.SubScreenType
+import cn.trans88.taxiappkotlin.util.DateUtil
+import cn.trans88.taxiappkotlin.util.DayType
import cn.trans88.taxiappkotlin.util.YoungUtil
import cn.trans88.taxiappkotlin.xixunUtil.OnScreenSizeListener
import cn.trans88.taxiappkotlin.xixunUtil.Xixun.getCardWidthHeight
@@ -46,6 +49,7 @@ import cn.trans88.taxiappkotlin.xixunUtil.Xixun.setOnScreenListener
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.request.RequestOptions
+import com.google.gson.Gson
import com.permissionx.guolindev.PermissionX
import com.trs88.kurolibrary.execute.KuroExecutor
import com.trs88.kurolibrary.util.MainHandler
@@ -67,8 +71,13 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
private val busReceiver = BusReceiver()//豪胜公交Receiver
private val gpsReceiver = GpsReceiver()//Gps信息Receiver
+ private lateinit var configurations: Configurations
+
private lateinit var playViewModel: PlayViewModel
+ private var saveRuntimeTimer:Timer? = null
+ private var startSaveRunTimer:Timer? = null
+
val handler = MyHandler(this)
val mainHandler = Handler(Looper.getMainLooper())
@@ -95,6 +104,8 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
// Advertise().toString().loge()
setContentView(R.layout.activity_main)
+ configurations = Configurations.config(this)
+
//读取保留的配置文件
// readConfiguration()
@@ -176,10 +187,132 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
}
mLocationManager?.removeUpdates(getLocationListener())
}
+ saveStartTime()
},30 * 1000)
// testLocation()
}
+ /**
+ * 保存开始运行时间
+ */
+ fun saveStartTime(){
+ var cacheStartTime:Long = configurations.startRunTime()
+ var currentTime = System.currentTimeMillis()
+ "saveStartTime ---> currentTime:$currentTime".loge()
+ if (currentTime>23646086L){
+
+ startSaveRunTimer?.let {
+ it.purge()
+ it.cancel()
+ }
+ startSaveRunTimer = null
+
+ var dayType = DateUtil.getDaysDiff(currentTime,cacheStartTime)
+ when(dayType){
+ DayType.IS_OTHER_DAY.ordinal -> { //如果缓存的启动时间是三天前(或更久)了,或者为零,直接覆盖
+ "startRunTime,endRunTime初始化为:$currentTime".loge()
+ configurations.startRunTimeSave(currentTime)
+ configurations.endRunTimeSave(currentTime)
+ configurations.sumRunTimeSave(0L)
+ startRuntimeTimer()
+ }
+ DayType.IS_SAME_DAY.ordinal -> {//同一天重启
+ //先计算上次重启前的运行时间
+ val lastSumTime = configurations.sumRunTime()
+ val lastStartRuntime = configurations.startRunTime()
+ val lastEndRuntime = configurations.endRunTime()
+ val lastRunTime = lastEndRuntime - lastStartRuntime
+ "当前时间:$currentTime,lastStartRuntime:$lastStartRuntime,lastEndRuntime:$lastEndRuntime".loge()
+ "lastSumTime:$lastSumTime,lastRuntime:$lastRunTime".loge()
+ val todaySumRuntime = lastRunTime + lastSumTime
+ configurations.sumRunTimeSave(todaySumRuntime)
+ "程序启动,目前运行时间(毫秒):${todaySumRuntime}".loge()
+
+ //测试上报接口
+// val runtimeJson = RuntimeJson(configurations.cardId(),todaySumRuntime,System.currentTimeMillis())
+// configurations.runtimeJsonStringSave(Gson().toJson(runtimeJson))
+ if (!configurations.runtimeJsonString().isNullOrEmpty()){
+ ConnManger.sendRuntimeToWeb()
+ }
+
+ //保存新的开始运行时间,和结束时间
+ configurations.startRunTimeSave(currentTime)
+ configurations.endRunTimeSave(currentTime)
+ startRuntimeTimer()
+ }
+ DayType.IS_SECOND_DAY.ordinal -> {
+ //先计算上次重启前的运行时间
+ val lastSumTime = configurations.sumRunTime()
+ val lastStartRuntime = configurations.startRunTime()
+ val lastEndRuntime = configurations.endRunTime()
+ val lastRunTime = lastEndRuntime - lastStartRuntime
+ "当前时间:$currentTime,lastStartRuntime:$lastStartRuntime,lastEndRuntime:$lastEndRuntime".loge()
+ "lastSumTime:$lastSumTime,lastRuntime:$lastRunTime".loge()
+ val yesterdaySumTime = lastRunTime + lastSumTime
+ "程序启动,昨天运行时间(毫秒):${yesterdaySumTime}".loge()
+ //提交昨天一整天的运行时间
+ val runtimeJson = RuntimeJson(configurations.cardId(),yesterdaySumTime,System.currentTimeMillis())
+ configurations.runtimeJsonStringSave(Gson().toJson(runtimeJson))
+ ConnManger.sendRuntimeToWeb()
+ //保存新的开始运行时间,和结束时间
+ configurations.startRunTimeSave(currentTime)
+ configurations.endRunTimeSave(currentTime)
+ configurations.sumRunTimeSave(0L)
+ startRuntimeTimer()
+ }
+ else -> {
+ configurations.startRunTimeSave(currentTime)
+ configurations.endRunTimeSave(currentTime)
+ configurations.sumRunTimeSave(0L)
+ }
+ }
+ } else {
+ if (startSaveRunTimer == null){
+ startSaveRunTimer = Timer()
+ startSaveRunTimer?.schedule(object :TimerTask(){
+ override fun run() {
+ saveStartTime()
+ }
+ },30*1000L,30*1000L)
+ }
+ }
+
+
+ }
+
+ /**
+ * 启动计算运行时长的计时器
+ */
+ private fun startRuntimeTimer(){
+ "startRuntimeTimer()".loge()
+ saveRuntimeTimer?.purge()
+ saveRuntimeTimer?.cancel()
+ if (saveRuntimeTimer == null){
+ saveRuntimeTimer = Timer()
+ saveRuntimeTimer?.schedule(object : TimerTask(){
+ override fun run() {
+ val endRuntime = configurations.endRunTime()
+ val startRuntime = configurations.startRunTime()
+ "RuntimeTimer --> currentEndRuntime:$endRuntime".loge()
+ val type = DateUtil.getDaysDiff(endRuntime,startRuntime)
+ if (DayType.IS_SECOND_DAY.ordinal == type) {
+ val lastRunTime = endRuntime - startRuntime
+ val yesterdayRuntime = configurations.sumRunTime() + lastRunTime
+ //提交昨天一整天的运行时间
+ val runtimeJson = RuntimeJson(configurations.cardId(),yesterdayRuntime,System.currentTimeMillis())
+ configurations.runtimeJsonStringSave(Gson().toJson(runtimeJson))
+ ConnManger.sendRuntimeToWeb()
+ //保存新的开始运行时间,和结束时间
+ configurations.startRunTimeSave(endRuntime)
+ configurations.sumRunTimeSave(0L)
+ }
+
+ configurations.endRunTimeSave(endRuntime+30*1000L)
+ }
+ },30*1000L,30*1000L)
+ }
+ }
+
//#edit by ljh 2023/2/16
fun getViewModel():PlayViewModel{
return playViewModel
@@ -564,6 +697,15 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
override fun onAvailable() {
YoungUtil.YoungLog("网络可用")
// RefreshPlayer.refresh()
+// val currentStartTime = configurations.startRunTime()
+// if (currentStartTime>23646086L && !isStartedSaveRuntime && !isFirstSaveRuntime){
+// Timer().schedule(object :TimerTask(){
+// override fun run() {
+// "上一次开始运行时间:${currentStartTime},重置".loge()
+// saveStartTime()
+// }
+// },5000L)
+// }
}
override fun onLost() {
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayViewModel.kt b/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayViewModel.kt
index 39345ab..c49a337 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayViewModel.kt
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayViewModel.kt
@@ -463,19 +463,19 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
YoungUtil.YoungLog( "Advertise id:" + advertise.ad_id + " " + advertise.pathName)
//记录上一个广告日志的duration
- if (curLogger != null && Configurations.config(TaxiApp.instance()).loggerSwitch()) {
- var duration: Long = System.currentTimeMillis() - curLogger!!.created_at
-
- if (curAdvertise != null) {
- if (duration >= (curAdvertise!!.duration.toLong() - 200) && duration <= (curAdvertise!!.duration.toLong() + 200)) {
- duration = curAdvertise!!.duration.toLong()
- }
- }
- if (!advertise.isCount){
- curLogger!!.duration = duration
- }
- "日志durarion:${curLogger!!.duration}".loge()
- }
+// if (curLogger != null && Configurations.config(TaxiApp.instance()).loggerSwitch()) {
+// var duration: Long = System.currentTimeMillis() - curLogger!!.created_at
+//
+// if (curAdvertise != null) {
+// if (duration >= (curAdvertise!!.duration.toLong() - 200) && duration <= (curAdvertise!!.duration.toLong() + 200)) {
+// duration = curAdvertise!!.duration.toLong()
+// }
+// }
+// if (!advertise.isCount){
+// curLogger!!.duration = duration
+// }
+// "日志durarion:${duration}".loge()
+// }
val createView = fl_play.createView(fl_play.context, advertise, 0)
@@ -794,8 +794,8 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
if (curLogger != null) {
YoungUtil.YoungLog("TID: " + Thread.currentThread().id + ", insert normal play logger")
curLogger!!.end_play_ts = System.currentTimeMillis()
- val roundingDuration = Math.ceil((curLogger!!.duration.toDouble() / 1000)) * 1000
- curLogger!!.duration = roundingDuration.toLong()
+// val roundingDuration = Math.ceil((curLogger!!.duration.toDouble() / 1000)) * 1000
+// curLogger!!.duration = roundingDuration.toLong()
DaoUtil.getPlayLoggerDao().insert(curLogger)
"存储日志:${curLogger?.begin_play_ts}".loge()
@@ -836,9 +836,10 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
latitude = curlatitude
// YoungUtil.YoungLog("advertise adid :${advertise.ad_id}, 经纬度 ${longitude},${latitude}")
//#edit by ljh
- if (advertise.isCount){
- duration = advertise.duration.toLong()
- }
+// if (advertise.isCount){
+// duration = advertise.duration.toLong()
+// }
+ duration = advertise.duration.toLong()
}
YoungUtil.YoungLog("初始化curLogger:$curLogger")
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/util/DateUtil.java b/app/src/main/java/cn/trans88/taxiappkotlin/util/DateUtil.java
index 17d5c88..f6ce6fe 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/util/DateUtil.java
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/util/DateUtil.java
@@ -1,8 +1,15 @@
package cn.trans88.taxiappkotlin.util;
+import android.os.Build;
import android.util.Log;
+import androidx.annotation.RequiresApi;
+
import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
@@ -96,4 +103,59 @@ public class DateUtil {
String now = dateTimeFormat.format(new Date());
return now;
}
+
+ /**
+ * 判断当前系统时间跟缓存的 应用开始运行时间对比,是不是第二天的时间
+ * 获取时间差,当前时间与缓存时间相差的天数
+ * @param currentTime
+ * @param cacheTime
+ * @return
+ */
+ public static int getDaysDiff(long currentTime, long cacheTime){
+ Log.d("yzd_t", "currentTime: " + currentTime + ", cacheTime: " + cacheTime);
+ int dayType = DayType.IS_OTHER_DAY.ordinal();
+// long currentTimeStamp = 1699723270L; // 替换为currentTimeStamp的值 2023/11/12
+// long lastTimeStamp = 1699690270L; // 替换为lastTimeStamp的值 2023/11/11
+
+ // 将时间戳转换为Date对象
+// Date currentDate = new Date(currentTimeStamp * 1000L);
+// Date lastDate = new Date(lastTimeStamp * 1000L);
+ Date currentDate = new Date(currentTime);
+ Date lastDate = new Date(cacheTime);
+
+ // 创建Calendar对象并设置时间
+ Calendar currentCalendar = Calendar.getInstance();
+ currentCalendar.setTime(currentDate);
+ Calendar lastCalendar = Calendar.getInstance();
+ lastCalendar.setTime(lastDate);
+
+ // 设置时间为午夜
+ currentCalendar.set(Calendar.HOUR_OF_DAY, 0);
+ currentCalendar.set(Calendar.MINUTE, 0);
+ currentCalendar.set(Calendar.SECOND, 0);
+ currentCalendar.set(Calendar.MILLISECOND, 0);
+
+ lastCalendar.set(Calendar.HOUR_OF_DAY, 0);
+ lastCalendar.set(Calendar.MINUTE, 0);
+ lastCalendar.set(Calendar.SECOND, 0);
+ lastCalendar.set(Calendar.MILLISECOND, 0);
+
+ // 判断日期差异
+ long diff = currentCalendar.getTimeInMillis() - lastCalendar.getTimeInMillis();
+ int daysDiff = (int) (diff / (24 * 60 * 60 * 1000));
+ Log.d("yzd_t", "daysDiff: " + daysDiff);
+
+ if (daysDiff == 1) {
+ Log.d("yzd_t","currentTimeStamp对应的时间是lastTimeStamp的后一天的时间。");
+ dayType = DayType.IS_SECOND_DAY.ordinal();
+ } else if (daysDiff == 0) {
+ Log.d("yzd_t","currentTimeStamp对应的时间不是lastTimeStamp的后一天的时间。");
+ dayType = DayType.IS_SAME_DAY.ordinal();
+ }
+
+ return dayType;
+ }
+
+
+
}
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/util/DayType.java b/app/src/main/java/cn/trans88/taxiappkotlin/util/DayType.java
new file mode 100644
index 0000000..4faa5c3
--- /dev/null
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/util/DayType.java
@@ -0,0 +1,12 @@
+package cn.trans88.taxiappkotlin.util;
+
+/**
+ * @Author: LJH
+ * @Time: 2023/11/14
+ * @description:
+ */
+public enum DayType {
+ IS_SAME_DAY,
+ IS_SECOND_DAY,
+ IS_OTHER_DAY,
+}
diff --git a/debug/output.json b/debug/output.json
index 4b743ba..dcc3682 100644
--- a/debug/output.json
+++ b/debug/output.json
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":237,"versionName":"3.3.3-beta26.3.9.3.94-debug","enabled":true,"outputFile":"TaxiApp_v3.3.3-beta26.3.9.3.94-debug{237}.apk","fullName":"debug","baseName":"debug","dirName":""},"path":"TaxiApp_v3.3.3-beta26.3.9.3.94-debug{237}.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":240,"versionName":"3.3.3-beta26.3.9.97-debug","enabled":true,"outputFile":"TaxiApp_v3.3.3-beta26.3.9.97-debug{240}.apk","fullName":"debug","baseName":"debug","dirName":""},"path":"TaxiApp_v3.3.3-beta26.3.9.97-debug{240}.apk","properties":{}}]
\ No newline at end of file
diff --git a/local.properties b/local.properties
index 9119a62..2777e6b 100644
--- a/local.properties
+++ b/local.properties
@@ -4,5 +4,5 @@
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
-#Thu Sep 07 10:09:52 GMT+08:00 2023
+#Mon Nov 06 09:42:57 GMT+08:00 2023
sdk.dir=D\:\\Android\\sdk
diff --git a/release/output.json b/release/output.json
index b399a79..501d24c 100644
--- a/release/output.json
+++ b/release/output.json
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":238,"versionName":"3.3.3-beta26.3.9.3.95-release","enabled":true,"outputFile":"TaxiApp_v3.3.3-beta26.3.9.3.95-release{238}.apk","fullName":"release","baseName":"release","dirName":""},"path":"TaxiApp_v3.3.3-beta26.3.9.3.95-release{238}.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":239,"versionName":"3.3.3-beta26.3.9.96-release","enabled":true,"outputFile":"TaxiApp_v3.3.3-beta26.3.9.96-release{239}.apk","fullName":"release","baseName":"release","dirName":""},"path":"TaxiApp_v3.3.3-beta26.3.9.96-release{239}.apk","properties":{}}]
\ No newline at end of file