From 6295fc3c5711ad7bb4acdfe2dfea2e57d5adbc27 Mon Sep 17 00:00:00 2001 From: renwj Date: Tue, 9 May 2023 17:31:30 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=B8=8B=E8=BD=BD=E5=B7=A5=E5=85=B7]=20?= =?UTF-8?q?=E9=87=8D=E6=9E=84=E4=B8=8B=E8=BD=BD=E5=B7=A5=E5=85=B7=E7=B1=BB?= =?UTF-8?q?;=E6=94=AF=E6=8C=81=E6=96=AD=E7=82=B9=E7=BB=AD=E4=BC=A0;?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E7=8A=B6=E6=80=81=E7=9B=91=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/wigets/video/VideoPlayerView.kt | 45 +-- app/build.gradle | 1 + .../com/mogo/functions/test/DownloaderTest.kt | 50 +++ .../com/mogo/functions/test/RoadAITest.kt | 323 ++++++++++-------- config.gradle | 2 + .../obu/MogoPrivateObuNewManager.kt | 4 +- .../DevaToolsProvider.kt | 3 +- .../upgrade/UpgradeAppNetWorkManager.kt | 3 +- .../upgrade/UpgradeManager.kt | 89 ++--- core/mogo-core-utils/build.gradle | 1 + .../utilcode/breakpoint/bean/FileBean.java | 100 ------ .../utilcode/breakpoint/bean/ThreadBean.java | 74 ---- .../breakpoint/callback/DownloadCallBack.java | 40 --- .../breakpoint/callback/IDownload.java | 39 --- .../core/utilcode/breakpoint/db/DBHelper.java | 32 -- .../utilcode/breakpoint/db/dao/ThreadDao.java | 43 --- .../breakpoint/db/impl/ThreadDaoImpl.java | 160 --------- .../breakpoint/event/DownloadData.java | 49 --- .../breakpoint/services/DownloadService.java | 206 ----------- .../breakpoint/thread/DownloadTask.java | 165 --------- .../breakpoint/thread/DownloadThread.java | 105 ------ .../breakpoint/thread/InitThread.java | 68 ---- .../breakpoint/utils/DownloadUtils.java | 30 -- .../{breakpoint => download}/Config.java | 2 +- .../core/utilcode/download/DownloadUtils.kt | 59 ++++ .../download/callback/IDownloadListener.kt | 30 ++ gradle.properties | 3 - 27 files changed, 367 insertions(+), 1359 deletions(-) create mode 100644 app/src/androidTest/java/com/mogo/functions/test/DownloaderTest.kt delete mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/bean/FileBean.java delete mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/bean/ThreadBean.java delete mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/callback/DownloadCallBack.java delete mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/callback/IDownload.java delete mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/db/DBHelper.java delete mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/db/dao/ThreadDao.java delete mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/db/impl/ThreadDaoImpl.java delete mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/event/DownloadData.java delete mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/services/DownloadService.java delete mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/DownloadTask.java delete mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/DownloadThread.java delete mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/InitThread.java delete mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/utils/DownloadUtils.java rename core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/{breakpoint => download}/Config.java (93%) create mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/DownloadUtils.kt create mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/callback/IDownloadListener.kt diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/VideoPlayerView.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/VideoPlayerView.kt index ce09411a42..b61739f75b 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/VideoPlayerView.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/video/VideoPlayerView.kt @@ -12,9 +12,8 @@ import androidx.viewpager.widget.PagerAdapter import androidx.viewpager.widget.ViewPager import com.bumptech.glide.Glide import com.bumptech.glide.request.RequestOptions -import com.mogo.eagle.core.utilcode.breakpoint.bean.ThreadBean -import com.mogo.eagle.core.utilcode.breakpoint.callback.IDownload -import com.mogo.eagle.core.utilcode.breakpoint.utils.DownloadUtils +import com.mogo.eagle.core.utilcode.download.* +import com.mogo.eagle.core.utilcode.download.callback.* import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant @@ -154,8 +153,7 @@ class AdvanceVideoView @JvmOverloads constructor( Logger.d(ImageVideoRotationView.TAG, "startDownLoadVideo") FileUtils.createFileDir(mVideoDirPath) DownloadUtils.downLoad( - context, fileNetPath, mVideoDirPath, downloadVideoName, 5, downListener - ) + context, fileNetPath!!, mVideoDirPath!!, downloadVideoName, downListener) } fun startPlay(localVideoPath: String?) { @@ -196,40 +194,33 @@ class AdvanceVideoView @JvmOverloads constructor( } } - private val downListener = object : IDownload { - override fun onStart(url: String?) { + private val downListener = object : IDownloadListener { + + override fun onStart(url: String) { setCacheImageViewVisible() Logger.d(ImageVideoRotationView.TAG, "download-onStart") } - override fun onPause(url: String?, threadBean: ThreadBean?) { - Logger.d(ImageVideoRotationView.TAG, "download-onPause") -// UiThreadHandler.postDelayed(Runnable { -// startDownLoadVideo() -// },DOWNLOAD_DELAY) - // todo 测试下网络断掉是否会走onpause,且网络回复也不会继续下载 + override fun onProgress(url: String, downloaded: Long, total: Long) { + Logger.d(ImageVideoRotationView.TAG, "download-onProgress== ${ (downloaded * 100 / total).toInt() }") } - override fun onProgress(url: String?, length: Int) { - Logger.d(ImageVideoRotationView.TAG, "download-onProgress== $length") - } - - override fun onFinished(url: String?, threadBean: ThreadBean?, localPath: String?) { + override fun onFinished(url: String, path: String) { Logger.d(ImageVideoRotationView.TAG, "download-onFinished = $url") - if (url.equals(fileNetPath)) { //发现下载工具在断网又连网后,已完成的任务又都下载,跳转播放出现问题 + if (url == fileNetPath) { //发现下载工具在断网又连网后,已完成的任务又都下载,跳转播放出现问题 //下载完成 ThreadUtils.runOnUiThread { - startPlay(Uri.fromFile(File(mVideoDirPath + downloadVideoName)).toString()) + startPlay(Uri.fromFile(File(path)).toString()) } } else {//如果当前文件不存在再次去下载当前的 Logger.d( ImageVideoRotationView.TAG, "download-onFinished = not current" + ",currentUrl = $fileNetPath " ) - if (FileUtils.isFileExists(mVideoDirPath + downloadVideoName)) { + if (FileUtils.isFileExists(path)) { Logger.d(ImageVideoRotationView.TAG, "have download startPlay") ThreadUtils.runOnUiThread { - startPlay(Uri.fromFile(File(mVideoDirPath + downloadVideoName)).toString()) + startPlay(Uri.fromFile(File(path)).toString()) } return } else { @@ -238,14 +229,10 @@ class AdvanceVideoView @JvmOverloads constructor( } } - override fun onError(url: String?, errorMsg: String?) { - Logger.d(ImageVideoRotationView.TAG, "download-onError-$errorMsg") + override fun onError(url: String, error: String?) { + Logger.d(ImageVideoRotationView.TAG, "download-onError-$error") //出错再次下载 - if (errorMsg != null) { - if (errorMsg.startsWith("initFailed")) { - startDownLoadVideo() - } - } + startDownLoadVideo() } } } diff --git a/app/build.gradle b/app/build.gradle index 6a751e6a35..beaa66ba42 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -231,6 +231,7 @@ dependencies { androidTestImplementation rootProject.ext.dependencies.androidx_runner androidTestImplementation rootProject.ext.dependencies.androidx_espresso_core androidTestImplementation rootProject.ext.dependencies.localbroadcastmanager + androidTestImplementation rootProject.ext.dependencies.downloader } diff --git a/app/src/androidTest/java/com/mogo/functions/test/DownloaderTest.kt b/app/src/androidTest/java/com/mogo/functions/test/DownloaderTest.kt new file mode 100644 index 0000000000..b36a760b02 --- /dev/null +++ b/app/src/androidTest/java/com/mogo/functions/test/DownloaderTest.kt @@ -0,0 +1,50 @@ +package com.mogo.functions.test + +import android.util.* +import androidx.test.core.app.* +import androidx.test.ext.junit.runners.* +import androidx.test.filters.* +import androidx.test.platform.app.* +import com.mogo.core.download.* +import com.mogo.eagle.core.function.main.* +import kotlinx.coroutines.* +import kotlinx.coroutines.flow.* +import org.junit.* +import org.junit.runner.* +import java.io.* + + +@RunWith(AndroidJUnit4::class) +@LargeTest +class DownloaderTest { + + lateinit var launch: ActivityScenario + + @Before + fun before() { + launch = ActivityScenario.launch(MainLauncherActivity::class.java) + } + + companion object { + + const val TAG = "DownloaderTest" + } + + @Test + fun testDownload() = runBlocking { + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + Downloader.init(appContext) + Downloader.download( + "https://scm-1255510688.cos.ap-beijing.myqcloud.com/test/com.mogo.launcher.f/2.9.0.1002/IntelligentPilot_v2.9.0.1002_20220725_[fPadLenovoOchBus-launcher-qa]_debug.apk", + File(appContext.getExternalFilesDir(null), "/apks/2.apk").absolutePath) + .flowOn(Dispatchers.IO) + .collect { + when(it) { + is DownloadStart -> Log.d(TAG, "下载开始: ${it.downloadUrl}") + is DownloadFailed -> Log.d(TAG, "---error: ${it.msg}: ${it.downloadUrl}") + is DownloadSuccess -> Log.d(TAG, "下载成功: ${it.path}, 文件存在?:${File(it.path).exists()}") + is Downloading -> Log.d(TAG, "下载进度: ${it.downloaded}/${it.total}") + } + } + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/mogo/functions/test/RoadAITest.kt b/app/src/androidTest/java/com/mogo/functions/test/RoadAITest.kt index 2597b01f28..c098291281 100644 --- a/app/src/androidTest/java/com/mogo/functions/test/RoadAITest.kt +++ b/app/src/androidTest/java/com/mogo/functions/test/RoadAITest.kt @@ -1,156 +1,181 @@ -package com.mogo.functions.test - -import android.os.* -import androidx.test.core.app.* -import androidx.test.ext.junit.runners.* -import androidx.test.filters.* -import com.mogo.eagle.core.data.v2x.V2XEvent -import com.mogo.eagle.core.function.hmi.ui.* -import com.mogo.eagle.core.function.main.* -import com.mogo.eagle.core.data.v2x.V2XRoadXData -import com.mogo.eagle.core.utilcode.util.GsonUtils -import com.mogo.eagle.function.biz.v2x.v2n.V2XEventManager -import kotlinx.coroutines.* -import org.junit.* -import org.junit.runner.* -import roadwork.Road.* -import java.util.concurrent.* -import java.util.concurrent.TimeUnit.MILLISECONDS -import java.util.concurrent.TimeUnit.SECONDS -import kotlin.Result - -@RunWith(AndroidJUnit4::class) -@LargeTest -class RoadAITest { - - lateinit var launch: ActivityScenario - - @Before - fun before() { - launch = ActivityScenario.launch(MainLauncherActivity::class.java) - } - - @Test - fun test() = runBlocking(Dispatchers.Default) { - //ensureMoGoHmiFragmentShow() - val nanos = System.nanoTime() - val child = - RW_PB - .newBuilder() - .setHeader( - Header - .newBuilder() - .setFrameId("rw") - .setModuleName("ai_cloud") - .setStamp(Time.newBuilder() - .setSec(TimeUnit.NANOSECONDS.convert(nanos, SECONDS).toInt()) - .setNsec(180000000) - .build()) - .build()) - .setRoadwork( - Roadwork_PB - .newBuilder() - .setId("4e47e17d-4950-4c80-9b02-29a450e54b50") - .setScore(95) - .setDetectTime(nanos) - .setPoiType(100061) - .setType(1006) - .setCenter( - Center_PB - .newBuilder() - .setRoad(Road_PB - .newBuilder() - .setRoadId("200091") - .setLaneNo("-2") - .setTileId("556834853") - .setBearing(90) - .build()) - .setPoint(GPSPoint_PB - .newBuilder() - .setLat(40.20313763799314) - .setLon(116.72844402744953) - .build()) - .build()) - .addPolygon(0, GPSPoint_PB - .newBuilder() - .setLat(40.20314863899314) - .setLon(116.72844412744953) - .build()) - .addPolygon(1, GPSPoint_PB - .newBuilder() - .setLat(40.20314563819314) - .setLon(116.72844412744953) - .build()) - .addPolygon(2, GPSPoint_PB - .newBuilder() - .setLat(40.20312263869314) - .setLon(116.72844401744953) - .build()) - .addPolygon(3, GPSPoint_PB - .newBuilder() - .setLat(40.20322763889314) - .setLon(116.7284381644953) - .build()) -// .addPolygon(4, GPSPoint_PB -// .newBuilder() -// .setLat(26.819521911807858) -// .setLon(112.57508983920647) +//package com.mogo.functions.test +// +//import android.os.* +//import androidx.test.core.app.* +//import androidx.test.ext.junit.runners.* +//import androidx.test.filters.* +//import com.mogo.eagle.core.data.v2x.V2XEvent +//import com.mogo.eagle.core.function.hmi.ui.* +//import com.mogo.eagle.core.function.main.* +//import com.mogo.eagle.core.function.v2x.events.* +//import com.mogo.eagle.core.data.v2x.V2XRoadXData +//import com.mogo.eagle.core.utilcode.util.GsonUtils +//import com.mogo.eagle.function.biz.v2x.v2n.V2XEventManager +//import kotlinx.coroutines.* +//import org.junit.* +//import org.junit.runner.* +//import roadwork.Road.* +//import java.util.concurrent.* +//import java.util.concurrent.TimeUnit.MILLISECONDS +//import java.util.concurrent.TimeUnit.SECONDS +//import kotlin.Result +// +//@RunWith(AndroidJUnit4::class) +//@LargeTest +//class RoadAITest { +// +// lateinit var launch: ActivityScenario +// +// @Before +// fun before() { +// launch = ActivityScenario.launch(MainLauncherActivity::class.java) +// } +// +// @Test +// fun test() = runBlocking(Dispatchers.Default) { +// ensureMoGoHmiFragmentShow() +// val nanos = System.nanoTime() +// val child = +// RW_PB +// .newBuilder() +// .setHeader( +// Header +// .newBuilder() +// .setFrameId("rw") +// .setModuleName("ai_cloud") +// .setStamp(Time.newBuilder() +// .setSec(TimeUnit.NANOSECONDS.convert(nanos, SECONDS).toInt()) +// .setNsec(180000000) // .build()) -// .addPolygon(5, GPSPoint_PB +// .build()) +// .setRoadwork( +// Roadwork_PB +// .newBuilder() +// .setId("4e47e17d-4950-4c80-9b02-29a450e54b50") +// .setScore(95) +// .setDetectTime(nanos) +// .setPoiType(100061) +// .setType(1006) +// .setCenter( +// Center_PB +// .newBuilder() +// .setRoad(Road_PB +// .newBuilder() +// .setRoadId("200091") +// .setLaneNo("-2") +// .setTileId("556834853") +// .setBearing(90) +// .build()) +// .setPoint(GPSPoint_PB +// .newBuilder() +// .setLat(40.20313763799314) +// .setLon(116.72844402744953) +// .build()) +// .build()) +// .addPolygon(0, GPSPoint_PB // .newBuilder() -// .setLat(26.819535210732194) -// .setLon(112.57509174248064) +// .setLat(40.20314863899314) +// .setLon(116.72844412744953) // .build()) -// .addPolygon(6, GPSPoint_PB +// .addPolygon(1, GPSPoint_PB // .newBuilder() -// .setLat(26.81954428950259) -// .setLon(112.5750796303722) +// .setLat(40.20314563819314) +// .setLon(116.72844412744953) // .build()) -// .addPolygon(7, GPSPoint_PB +// .addPolygon(2, GPSPoint_PB // .newBuilder() -// .setLat(26.819549148117684) -// .setLon(112.57505350287552) +// .setLat(40.20312263869314) +// .setLon(116.72844401744953) // .build()) - .addRoad(0, Road_PB - .newBuilder() - .setRoadId("200090") - .setLaneNo("-2") - .setTileId("556834853") - .setBearing(154) - .build()) - .addRoad(1, Road_PB - .newBuilder() - .setRoadId("200091") - .setLaneNo("-2") - .setTileId("556834853") - .setBearing(156) - .build()) - .build()) - .build() - val event = V2XEvent.RoadAI(data = child) - while (true) { - delay(1000) - V2XEventManager.onAck(event) - } - - } - - - @Test - fun testRoadAI() = runBlocking { - // ensureMoGoHmiFragmentShow() - val shigu = "{\"poiType\":\"100321\",\"receiveTime\":1673506266967,\"detectTime\":1673506266924,\"id\":\"f7b1df85-895a-41c1-b05d-7356955c1c91\",\"index\":\"636136931493454271\",\"polygon\":[{\"lon\":112.57321291454436,\"lat\":26.823070465392494},{\"lon\":112.573215006931,\"lat\":26.8230675990919},{\"lon\":112.573219106955,\"lat\":26.823061914715},{\"lon\":112.573223182233,\"lat\":26.8230562153801},{\"lon\":112.573227231639,\"lat\":26.8230505007471},{\"lon\":112.573231254048,\"lat\":26.8230447704754},{\"lon\":112.573235248336,\"lat\":26.8230390242245},{\"lon\":112.573239213377,\"lat\":26.8230332616541},{\"lon\":112.573243148045,\"lat\":26.8230274824236},{\"lon\":112.573247051217,\"lat\":26.8230216861928},{\"lon\":112.573250921765,\"lat\":26.823015872621},{\"lon\":112.573254758566,\"lat\":26.823010041368},{\"lon\":112.573258560494,\"lat\":26.8230041920932},{\"lon\":112.573262326424,\"lat\":26.8229983244562},{\"lon\":112.573266055231,\"lat\":26.8229924381166},{\"lon\":112.573269779025,\"lat\":26.8229864802436},{\"lon\":112.573273466,\"lat\":26.8229805039295},{\"lon\":112.573277118207,\"lat\":26.8229745102999},{\"lon\":112.573280737695,\"lat\":26.8229685004807},{\"lon\":112.573284326516,\"lat\":26.8229624755973},{\"lon\":112.57328788672,\"lat\":26.8229564367755},{\"lon\":112.573291420358,\"lat\":26.822950385141},{\"lon\":112.573294929481,\"lat\":26.8229443218192},{\"lon\":112.573298416139,\"lat\":26.822938247936},{\"lon\":112.573301882384,\"lat\":26.822932164617},{\"lon\":112.573305330265,\"lat\":26.8229260729878},{\"lon\":112.573308761833,\"lat\":26.8229199741741},{\"lon\":112.57331217914,\"lat\":26.8229138693015},{\"lon\":112.573315584235,\"lat\":26.8229077594956},{\"lon\":112.573318940869,\"lat\":26.8229017005891},{\"lon\":112.57332227685,\"lat\":26.8228956326057},{\"lon\":112.573325593901,\"lat\":26.8228895563037},{\"lon\":112.573328893742,\"lat\":26.8228834724414},{\"lon\":112.573332178097,\"lat\":26.8228773817772},{\"lon\":112.573335448685,\"lat\":26.8228712850694},{\"lon\":112.573338707228,\"lat\":26.8228651830762},{\"lon\":112.573341955449,\"lat\":26.822859076556},{\"lon\":112.573345195068,\"lat\":26.8228529662671},{\"lon\":112.573348427807,\"lat\":26.8228468529679},{\"lon\":112.573351655387,\"lat\":26.8228407374165},{\"lon\":112.57335487953,\"lat\":26.8228346203714},{\"lon\":112.573358101958,\"lat\":26.8228285025908},{\"lon\":112.573361324391,\"lat\":26.8228223848331},{\"lon\":112.573364548551,\"lat\":26.8228162678566},{\"lon\":112.573367776161,\"lat\":26.8228101524196},{\"lon\":112.57337100894,\"lat\":26.8228040392803},{\"lon\":112.573374248612,\"lat\":26.8227979291972},{\"lon\":112.573377570805,\"lat\":26.8227916708447},{\"lon\":112.573380890942,\"lat\":26.8227854119249},{\"lon\":112.573384209049,\"lat\":26.8227791523835},{\"lon\":112.573387525157,\"lat\":26.8227728921664},{\"lon\":112.573390839291,\"lat\":26.8227666312191},{\"lon\":112.573394151482,\"lat\":26.8227603694874},{\"lon\":112.573397461756,\"lat\":26.8227541069172},{\"lon\":112.573400770143,\"lat\":26.822747843454},{\"lon\":112.573404076669,\"lat\":26.8227415790437},{\"lon\":112.573407381363,\"lat\":26.822735313632},{\"lon\":112.573410684254,\"lat\":26.8227290471645},{\"lon\":112.57341398537,\"lat\":26.8227227795872},{\"lon\":112.573417284738,\"lat\":26.8227165108456},{\"lon\":112.573420582386,\"lat\":26.8227102408855},{\"lon\":112.573423878344,\"lat\":26.8227039696526},{\"lon\":112.573427172639,\"lat\":26.8226976970928},{\"lon\":112.573430465298,\"lat\":26.8226914231516},{\"lon\":112.5736541921437,\"lat\":26.822260937315143},{\"lon\":112.57362367177457,\"lat\":26.822244991227713},{\"lon\":112.573399937477,\"lat\":26.822675492918},{\"lon\":112.573396691977,\"lat\":26.8226816946351},{\"lon\":112.573393403264,\"lat\":26.8226879586397},{\"lon\":112.573390112889,\"lat\":26.8226942213535},{\"lon\":112.573386820836,\"lat\":26.8227004828209},{\"lon\":112.573383527072,\"lat\":26.822706742987},{\"lon\":112.573380231507,\"lat\":26.8227130021005},{\"lon\":112.573376934206,\"lat\":26.8227192599775},{\"lon\":112.573373635113,\"lat\":26.8227255169308},{\"lon\":112.573370334197,\"lat\":26.8227317727439},{\"lon\":112.573367031403,\"lat\":26.8227380276418},{\"lon\":112.573363726739,\"lat\":26.822744281759},{\"lon\":112.573360420141,\"lat\":26.8227505349933},{\"lon\":112.573357111541,\"lat\":26.8227567875221},{\"lon\":112.573353801054,\"lat\":26.8227630392523},{\"lon\":112.573350488563,\"lat\":26.8227692902611},{\"lon\":112.573347174021,\"lat\":26.8227755406808},{\"lon\":112.573343849991,\"lat\":26.8227818018286},{\"lon\":112.57334059532,\"lat\":26.8227879346295},{\"lon\":112.573337344447,\"lat\":26.8227940752481},{\"lon\":112.57333410391,\"lat\":26.8228002103548},{\"lon\":112.573330872,\"lat\":26.8228063391622},{\"lon\":112.573327646909,\"lat\":26.8228124609577},{\"lon\":112.573324426983,\"lat\":26.8228185749099},{\"lon\":112.573321210588,\"lat\":26.8228246801823},{\"lon\":112.573317995803,\"lat\":26.8228307762173},{\"lon\":112.573314781099,\"lat\":26.8228368621259},{\"lon\":112.573311564666,\"lat\":26.8228429372788},{\"lon\":112.573308344862,\"lat\":26.822849000878},{\"lon\":112.573305119998,\"lat\":26.8228550522037},{\"lon\":112.573301888377,\"lat\":26.8228610905445},{\"lon\":112.573298648327,\"lat\":26.8228671151949},{\"lon\":112.573295398165,\"lat\":26.8228731254473},{\"lon\":112.573292136233,\"lat\":26.822879120603},{\"lon\":112.573288860863,\"lat\":26.8228850999821},{\"lon\":112.573285560822,\"lat\":26.8228910767817},{\"lon\":112.573282199005,\"lat\":26.822897124157},{\"lon\":112.573278821808,\"lat\":26.8229031714324},{\"lon\":112.573275437073,\"lat\":26.8229092033326},{\"lon\":112.573272042813,\"lat\":26.8229152188038},{\"lon\":112.573268637042,\"lat\":26.8229212167948},{\"lon\":112.573265217788,\"lat\":26.8229271962611},{\"lon\":112.573261783086,\"lat\":26.8229331561851},{\"lon\":112.573258330982,\"lat\":26.8229390955283},{\"lon\":112.573254859519,\"lat\":26.8229450132931},{\"lon\":112.573251366753,\"lat\":26.8229509084733},{\"lon\":112.573247850743,\"lat\":26.8229567800818},{\"lon\":112.57324430955,\"lat\":26.8229626271411},{\"lon\":112.573240741245,\"lat\":26.8229684486883},{\"lon\":112.573237142704,\"lat\":26.8229742453022},{\"lon\":112.573233541124,\"lat\":26.8229799700034},{\"lon\":112.573229900299,\"lat\":26.8229856807403},{\"lon\":112.573226220729,\"lat\":26.8229913784753},{\"lon\":112.573222503466,\"lat\":26.8229970634612},{\"lon\":112.573218749581,\"lat\":26.8230027359391},{\"lon\":112.573214960128,\"lat\":26.8230083961865},{\"lon\":112.573211136192,\"lat\":26.8230140444302},{\"lon\":112.573207278832,\"lat\":26.8230196809522},{\"lon\":112.573203389132,\"lat\":26.8230253060135},{\"lon\":112.573199468169,\"lat\":26.8230309198603},{\"lon\":112.573195517033,\"lat\":26.8230365227693},{\"lon\":112.573191536797,\"lat\":26.8230421150085},{\"lon\":112.573187548559,\"lat\":26.8230476745161},{\"lon\":112.57318546455338,\"lat\":26.823050549063097}],\"polygonRoads\":[{\"tileId\":556834853,\"roadId\":\"130372\",\"laneNo\":-1,\"bearing\":152,\"roadName\":\"雁鸣路\"},{\"tileId\":556834853,\"roadId\":\"130372\",\"laneNo\":-2,\"bearing\":152,\"roadName\":\"雁鸣路\"},{\"tileId\":556834853,\"roadId\":\"130372\",\"laneNo\":-3,\"bearing\":152,\"roadName\":\"雁鸣路\"}],\"center\":{\"lon\":112.57320982521519,\"lat\":26.82306821019599},\"centerRoad\":{\"tileId\":556834853,\"roadId\":\"130372\",\"laneNo\":-2,\"bearing\":152,\"roadName\":\"雁鸣路\"},\"obstacles\":[{\"id\":0,\"type\":1,\"score\":95,\"polygon\":[{\"lon\":112.57321361221982,\"lat\":26.823054701276522},{\"lon\":112.57321254435868,\"lat\":26.823070134384093},{\"lon\":112.57320704440468,\"lat\":26.823066238995114},{\"lon\":112.57320772757787,\"lat\":26.823050237509577}],\"boundBox\":[{\"x\":2979.852783203125,\"y\":929.4248657226562},{\"x\":3031.54296875,\"y\":929.4248657226562},{\"x\":3031.54296875,\"y\":977.5980834960938},{\"x\":2979.852783203125,\"y\":977.5980834960938}],\"center\":{\"lon\":112.57320982521519,\"lat\":26.82306821019599}}],\"imgUrl\":\"http://petchfile-1255510688.cos.ap-beijing.myqcloud.com/roadwork_image/2023-01-12/f7b1df85-895a-41c1-b05d-7356955c1c91_172_18_24_62.jpg?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDCWfcNwD5PXVWLxwejccR3Tiz5zhIkx0T%26q-sign-time%3D1673506267%3B1673513467%26q-key-time%3D1673506267%3B1673513467%26q-header-list%3D%26q-url-param-list%3D%26q-signature%3Db6b2911110c9941471cfc447d7704b9caa57a0e1\",\"ip\":\"172.18.24.62\",\"score\":95,\"radius\":0,\"type\":2,\"trianglePolygon\":[[{\"lon\":112.57321291454436,\"lat\":26.823070465392494},{\"lon\":112.573215006931,\"lat\":26.8230675990919},{\"lon\":112.573219106955,\"lat\":26.823061914715},{\"lon\":112.573223182233,\"lat\":26.8230562153801},{\"lon\":112.573227231639,\"lat\":26.8230505007471},{\"lon\":112.573231254048,\"lat\":26.8230447704754},{\"lon\":112.573235248336,\"lat\":26.8230390242245},{\"lon\":112.573239213377,\"lat\":26.8230332616541},{\"lon\":112.573243148045,\"lat\":26.8230274824236},{\"lon\":112.573247051217,\"lat\":26.8230216861928},{\"lon\":112.573250921765,\"lat\":26.823015872621},{\"lon\":112.573254758566,\"lat\":26.823010041368},{\"lon\":112.573258560494,\"lat\":26.8230041920932},{\"lon\":112.573262326424,\"lat\":26.8229983244562},{\"lon\":112.573266055231,\"lat\":26.8229924381166},{\"lon\":112.573269779025,\"lat\":26.8229864802436},{\"lon\":112.573273466,\"lat\":26.8229805039295},{\"lon\":112.573277118207,\"lat\":26.8229745102999},{\"lon\":112.573280737695,\"lat\":26.8229685004807},{\"lon\":112.573284326516,\"lat\":26.8229624755973},{\"lon\":112.57328788672,\"lat\":26.8229564367755},{\"lon\":112.573291420358,\"lat\":26.822950385141},{\"lon\":112.573294929481,\"lat\":26.8229443218192},{\"lon\":112.573298416139,\"lat\":26.822938247936},{\"lon\":112.573301882384,\"lat\":26.822932164617},{\"lon\":112.573305330265,\"lat\":26.8229260729878},{\"lon\":112.573308761833,\"lat\":26.8229199741741},{\"lon\":112.57331217914,\"lat\":26.8229138693015},{\"lon\":112.573315584235,\"lat\":26.8229077594956},{\"lon\":112.573318940869,\"lat\":26.8229017005891},{\"lon\":112.57332227685,\"lat\":26.8228956326057},{\"lon\":112.573325593901,\"lat\":26.8228895563037},{\"lon\":112.573328893742,\"lat\":26.8228834724414},{\"lon\":112.573332178097,\"lat\":26.8228773817772},{\"lon\":112.573335448685,\"lat\":26.8228712850694},{\"lon\":112.573338707228,\"lat\":26.8228651830762},{\"lon\":112.573341955449,\"lat\":26.822859076556},{\"lon\":112.573345195068,\"lat\":26.8228529662671},{\"lon\":112.573348427807,\"lat\":26.8228468529679},{\"lon\":112.573351655387,\"lat\":26.8228407374165},{\"lon\":112.57335487953,\"lat\":26.8228346203714},{\"lon\":112.573358101958,\"lat\":26.8228285025908},{\"lon\":112.573361324391,\"lat\":26.8228223848331},{\"lon\":112.573364548551,\"lat\":26.8228162678566},{\"lon\":112.573367776161,\"lat\":26.8228101524196},{\"lon\":112.57337100894,\"lat\":26.8228040392803},{\"lon\":112.573374248612,\"lat\":26.8227979291972},{\"lon\":112.573377570805,\"lat\":26.8227916708447},{\"lon\":112.573380890942,\"lat\":26.8227854119249},{\"lon\":112.573384209049,\"lat\":26.8227791523835},{\"lon\":112.573387525157,\"lat\":26.8227728921664},{\"lon\":112.573390839291,\"lat\":26.8227666312191},{\"lon\":112.573394151482,\"lat\":26.8227603694874},{\"lon\":112.573397461756,\"lat\":26.8227541069172},{\"lon\":112.573400770143,\"lat\":26.822747843454},{\"lon\":112.573404076669,\"lat\":26.8227415790437},{\"lon\":112.573407381363,\"lat\":26.822735313632},{\"lon\":112.573410684254,\"lat\":26.8227290471645},{\"lon\":112.57341398537,\"lat\":26.8227227795872},{\"lon\":112.573417284738,\"lat\":26.8227165108456},{\"lon\":112.573420582386,\"lat\":26.8227102408855},{\"lon\":112.573423878344,\"lat\":26.8227039696526},{\"lon\":112.573427172639,\"lat\":26.8226976970928},{\"lon\":112.573430465298,\"lat\":26.8226914231516},{\"lon\":112.5736541921437,\"lat\":26.822260937315143},{\"lon\":112.57362367177457,\"lat\":26.822244991227713},{\"lon\":112.573399937477,\"lat\":26.822675492918},{\"lon\":112.573396691977,\"lat\":26.8226816946351},{\"lon\":112.573393403264,\"lat\":26.8226879586397},{\"lon\":112.573390112889,\"lat\":26.8226942213535},{\"lon\":112.573386820836,\"lat\":26.8227004828209},{\"lon\":112.573383527072,\"lat\":26.822706742987},{\"lon\":112.573380231507,\"lat\":26.8227130021005},{\"lon\":112.573376934206,\"lat\":26.8227192599775},{\"lon\":112.573373635113,\"lat\":26.8227255169308},{\"lon\":112.573370334197,\"lat\":26.8227317727439},{\"lon\":112.573367031403,\"lat\":26.8227380276418},{\"lon\":112.573363726739,\"lat\":26.822744281759},{\"lon\":112.573360420141,\"lat\":26.8227505349933},{\"lon\":112.573357111541,\"lat\":26.8227567875221},{\"lon\":112.573353801054,\"lat\":26.8227630392523},{\"lon\":112.573350488563,\"lat\":26.8227692902611},{\"lon\":112.573347174021,\"lat\":26.8227755406808},{\"lon\":112.573343849991,\"lat\":26.8227818018286},{\"lon\":112.57334059532,\"lat\":26.8227879346295},{\"lon\":112.573337344447,\"lat\":26.8227940752481},{\"lon\":112.57333410391,\"lat\":26.8228002103548},{\"lon\":112.573330872,\"lat\":26.8228063391622},{\"lon\":112.573327646909,\"lat\":26.8228124609577},{\"lon\":112.573324426983,\"lat\":26.8228185749099},{\"lon\":112.573321210588,\"lat\":26.8228246801823},{\"lon\":112.573317995803,\"lat\":26.8228307762173},{\"lon\":112.573314781099,\"lat\":26.8228368621259},{\"lon\":112.573311564666,\"lat\":26.8228429372788},{\"lon\":112.573308344862,\"lat\":26.822849000878},{\"lon\":112.573305119998,\"lat\":26.8228550522037},{\"lon\":112.573301888377,\"lat\":26.8228610905445},{\"lon\":112.573298648327,\"lat\":26.8228671151949},{\"lon\":112.573295398165,\"lat\":26.8228731254473},{\"lon\":112.573292136233,\"lat\":26.822879120603},{\"lon\":112.573288860863,\"lat\":26.8228850999821},{\"lon\":112.573285560822,\"lat\":26.8228910767817},{\"lon\":112.573282199005,\"lat\":26.822897124157},{\"lon\":112.573278821808,\"lat\":26.8229031714324},{\"lon\":112.573275437073,\"lat\":26.8229092033326},{\"lon\":112.573272042813,\"lat\":26.8229152188038},{\"lon\":112.573268637042,\"lat\":26.8229212167948},{\"lon\":112.573265217788,\"lat\":26.8229271962611},{\"lon\":112.573261783086,\"lat\":26.8229331561851},{\"lon\":112.573258330982,\"lat\":26.8229390955283},{\"lon\":112.573254859519,\"lat\":26.8229450132931},{\"lon\":112.573251366753,\"lat\":26.8229509084733},{\"lon\":112.573247850743,\"lat\":26.8229567800818},{\"lon\":112.57324430955,\"lat\":26.8229626271411},{\"lon\":112.573240741245,\"lat\":26.8229684486883},{\"lon\":112.573237142704,\"lat\":26.8229742453022},{\"lon\":112.573233541124,\"lat\":26.8229799700034},{\"lon\":112.573229900299,\"lat\":26.8229856807403},{\"lon\":112.573226220729,\"lat\":26.8229913784753},{\"lon\":112.573222503466,\"lat\":26.8229970634612},{\"lon\":112.573218749581,\"lat\":26.8230027359391},{\"lon\":112.573214960128,\"lat\":26.8230083961865},{\"lon\":112.573211136192,\"lat\":26.8230140444302},{\"lon\":112.573207278832,\"lat\":26.8230196809522},{\"lon\":112.573203389132,\"lat\":26.8230253060135},{\"lon\":112.573199468169,\"lat\":26.8230309198603},{\"lon\":112.573195517033,\"lat\":26.8230365227693},{\"lon\":112.573191536797,\"lat\":26.8230421150085},{\"lon\":112.573187548559,\"lat\":26.8230476745161},{\"lon\":112.57318546455338,\"lat\":26.823050549063097}]],\"obstaclePoint\":[{\"lon\":112.573443,\"lat\":26.822538},{\"lon\":112.573691,\"lat\":26.822676},{\"lon\":112.573021,\"lat\":26.823149},{\"lon\":112.572974,\"lat\":26.823199}],\"createTime\":1673506267760,\"createTimeStr\":\"2023-01-12 14:51:07\"}" - val road1 = "{\"poiType\":\"100061\",\"receiveTime\":1673509755649,\"detectTime\":1673509755637,\"id\":\"86447e30-2dfc-4a27-8d01-41ffe9a9a7fe\",\"index\":\"636136931493457343\",\"polygon\":[{\"lon\":112.57337137520945,\"lat\":26.822950000610152},{\"lon\":112.5733703998375,\"lat\":26.82294943400411},{\"lon\":112.57336923793872,\"lat\":26.82294944578748},{\"lon\":112.57336827709125,\"lat\":26.82295003202963},{\"lon\":112.57336786590433,\"lat\":26.822950822795498},{\"lon\":112.57332583348149,\"lat\":26.823144415135413},{\"lon\":112.57332583904886,\"lat\":26.823145130116597},{\"lon\":112.57332615359141,\"lat\":26.82314578706645},{\"lon\":112.57332672775591,\"lat\":26.823146282906478},{\"lon\":112.57332747145331,\"lat\":26.823146539837108},{\"lon\":112.57332807078356,\"lat\":26.823146549872188},{\"lon\":112.57332882464814,\"lat\":26.82314631801647},{\"lon\":112.57332941903356,\"lat\":26.823145841742402},{\"lon\":112.57332970267485,\"lat\":26.82314536795171},{\"lon\":112.57339652767452,\"lat\":26.82297757920771},{\"lon\":112.57339644737766,\"lat\":26.82297673161999},{\"lon\":112.57339607387638,\"lat\":26.822976136665098},{\"lon\":112.57337137520945,\"lat\":26.822950000610152}],\"polygonRoads\":[{\"tileId\":556834853,\"roadId\":\"130314\",\"laneNo\":-1,\"bearing\":330,\"roadName\":\"雁鸣路\"},{\"tileId\":556834853,\"roadId\":\"130314\",\"laneNo\":-2,\"bearing\":330,\"roadName\":\"雁鸣路\"},{\"tileId\":556834853,\"roadId\":\"130314\",\"laneNo\":-3,\"bearing\":330,\"roadName\":\"雁鸣路\"},{\"tileId\":556834853,\"roadId\":\"130583\",\"laneNo\":-1,\"bearing\":278}],\"center\":{\"lon\":112.57336404707121,\"lat\":26.823024407262803},\"centerRoad\":{\"tileId\":556834853,\"roadId\":\"130314\",\"laneNo\":-2,\"bearing\":330,\"roadName\":\"雁鸣路\"},\"obstacles\":[{\"id\":0,\"type\":1,\"score\":88,\"polygon\":[{\"lon\":112.57334137965555,\"lat\":26.82313245733589},{\"lon\":112.573329020958,\"lat\":26.823145531571242},{\"lon\":112.57332663570918,\"lat\":26.823144025991855},{\"lon\":112.57333875695714,\"lat\":26.823130823353114}],\"boundBox\":[{\"x\":1439.8624267578125,\"y\":893.4229736328125},{\"x\":1474.45361328125,\"y\":893.4229736328125},{\"x\":1474.45361328125,\"y\":966.433837890625},{\"x\":1439.8624267578125,\"y\":966.433837890625}],\"center\":{\"lon\":112.57332779256919,\"lat\":26.823144756804734}},{\"id\":1,\"type\":1,\"score\":87,\"polygon\":[{\"lon\":112.57339986657128,\"lat\":26.822898951544797},{\"lon\":112.5733716620538,\"lat\":26.822952992001163},{\"lon\":112.57336786188131,\"lat\":26.822949186370185},{\"lon\":112.57339561566401,\"lat\":26.822894141465785}],\"boundBox\":[{\"x\":2085.054443359375,\"y\":503.0662841796875},{\"x\":2116.11865234375,\"y\":503.0662841796875},{\"x\":2116.11865234375,\"y\":559.9113159179688},{\"x\":2085.054443359375,\"y\":559.9113159179688}],\"center\":{\"lon\":112.5733698249888,\"lat\":26.822951164464232}},{\"id\":2,\"type\":1,\"score\":71,\"polygon\":[{\"lon\":112.57342641528835,\"lat\":26.82293191667262},{\"lon\":112.57339610867105,\"lat\":26.82297860774548},{\"lon\":112.5733928192764,\"lat\":26.822975877911627},{\"lon\":112.57342270277888,\"lat\":26.822928610829003}],\"boundBox\":[{\"x\":1873.2490234375,\"y\":507.2391357421875},{\"x\":1900.5283203125,\"y\":507.2391357421875},{\"x\":1900.5283203125,\"y\":562.299560546875},{\"x\":1873.2490234375,\"y\":562.299560546875}],\"center\":{\"lon\":112.57339452365564,\"lat\":26.822977300519444}}],\"imgUrl\":\"http://petchfile-1255510688.cos.ap-beijing.myqcloud.com/roadwork_image/2023-01-12/86447e30-2dfc-4a27-8d01-41ffe9a9a7fe_172_18_24_62.jpg?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDCWfcNwD5PXVWLxwejccR3Tiz5zhIkx0T%26q-sign-time%3D1673509757%3B1673516957%26q-key-time%3D1673509757%3B1673516957%26q-header-list%3D%26q-url-param-list%3D%26q-signature%3D557de14ddfb999d35ddef9e23b3532d9d299c62f\",\"ip\":\"172.18.24.62\",\"score\":82,\"radius\":0,\"type\":1,\"createTime\":1673509757496,\"createTimeStr\":\"2023-01-12 15:49:17\"}" - val road2 = "{\"poiType\":\"100061\",\"receiveTime\":1673509756306,\"detectTime\":1673509756290,\"id\":\"be6a2000-a96c-42c8-a7ef-f83388d84858\",\"index\":\"636136931493532287\",\"polygon\":[{\"lon\":112.5733515539896,\"lat\":26.823143145432386},{\"lon\":112.57335140084462,\"lat\":26.823142454672727},{\"lon\":112.57335096472467,\"lat\":26.823141869074952},{\"lon\":112.57335031202503,\"lat\":26.82314147779103},{\"lon\":112.57334954211333,\"lat\":26.82314134039038},{\"lon\":112.57334877220161,\"lat\":26.82314147779103},{\"lon\":112.573348119502,\"lat\":26.823141869074952},{\"lon\":112.57334768338202,\"lat\":26.823142454672727},{\"lon\":112.57334753023707,\"lat\":26.823143145432386},{\"lon\":112.57334768338202,\"lat\":26.82314383619207},{\"lon\":112.57334811950196,\"lat\":26.82314442178987},{\"lon\":112.5733487722016,\"lat\":26.823144813073792},{\"lon\":112.57334954211333,\"lat\":26.823144950474443},{\"lon\":112.57335031202504,\"lat\":26.823144813073792},{\"lon\":112.57335096472468,\"lat\":26.82314442178987},{\"lon\":112.57335140084464,\"lat\":26.82314383619207},{\"lon\":112.5733515539896,\"lat\":26.823143145432386}],\"polygonRoads\":[{\"tileId\":556834853,\"roadId\":\"130314\",\"laneNo\":-4,\"bearing\":332,\"roadName\":\"雁鸣路\"}],\"center\":{\"lon\":112.57334952644263,\"lat\":26.823143141971546},\"centerRoad\":{\"tileId\":556834853,\"roadId\":\"130314\",\"laneNo\":-4,\"bearing\":332,\"roadName\":\"雁鸣路\"},\"obstacles\":[{\"id\":0,\"type\":1,\"score\":72,\"polygon\":[{\"lon\":112.57341760772391,\"lat\":26.823104379136176},{\"lon\":112.57335121413183,\"lat\":26.82314367391432},{\"lon\":112.57334751791018,\"lat\":26.823142500693834},{\"lon\":112.57341321183773,\"lat\":26.82310322131963}],\"boundBox\":[{\"x\":1551.2252197265625,\"y\":352.58837890625},{\"x\":1562.4649658203125,\"y\":352.58837890625},{\"x\":1562.4649658203125,\"y\":376.17327880859375},{\"x\":1551.2252197265625,\"y\":376.17327880859375}],\"center\":{\"lon\":112.57334952644263,\"lat\":26.823143141971546}}],\"imgUrl\":\"http://petchfile-1255510688.cos.ap-beijing.myqcloud.com/roadwork_image/2023-01-12/be6a2000-a96c-42c8-a7ef-f83388d84858_172_18_24_42.jpg?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDCWfcNwD5PXVWLxwejccR3Tiz5zhIkx0T%26q-sign-time%3D1673509758%3B1673516958%26q-key-time%3D1673509758%3B1673516958%26q-header-list%3D%26q-url-param-list%3D%26q-signature%3Db2682464078ae53eae6e87f924abe17fa7c04ac8\",\"ip\":\"172.18.24.42\",\"score\":72,\"radius\":0,\"type\":1,\"createTime\":1673509758511,\"createTimeStr\":\"2023-01-12 15:49:18\"}" - val jingzhi1 = "{\"poiType\":\"100321\",\"detectTime\":1673506266924,\"id\":\"f7b1df85-895a-41c1-b05d-7356955c1c91\",\"index\":\"636136931493454271\",\"polygon\":[],\"center\":{\"lon\":112.57320982521519,\"lat\":26.82306821019599},\"centerRoad\":{\"tileId\":556834853,\"laneNo\":-2,\"bearing\":152},\"score\":95,\"radius\":0,\"type\":2}" - val jingzhi2 = "{\"poiType\":\"100321\",\"detectTime\":1673506266924,\"id\":\"f7b1df85-895a-41c1-b05d-7356955c1c91\",\"index\":\"636136931493454271\",\"polygon\":[],\"center\":{\"lon\":112.57320982521519,\"lat\":26.82306821019599},\"centerRoad\":{\"tileId\":556834853,\"laneNo\":-2,\"bearing\":152},\"score\":95,\"radius\":0,\"type\":2}" - val jingzhi3 = "{\"poiType\":\"100321\",\"detectTime\":1673506266924,\"id\":\"f7b1df85-895a-41c1-b05d-7356955c1c91\",\"index\":\"636136931493454271\",\"polygon\":[],\"center\":{\"lon\":112.57320982521519,\"lat\":26.82306821019599},\"centerRoad\":{\"tileId\":556834853,\"laneNo\":-2,\"bearing\":152},\"score\":95,\"radius\":0,\"type\":2}" - while (true) { - delay(1000) - V2XEventManager.onAck(V2XEvent.RoadEventX(data = GsonUtils.fromJson(shigu, V2XRoadXData::class.java))) - V2XEventManager.onAck(V2XEvent.RoadEventX(data = GsonUtils.fromJson(road1, V2XRoadXData::class.java))) - V2XEventManager.onAck(V2XEvent.RoadEventX(data = GsonUtils.fromJson(road2, V2XRoadXData::class.java))) - } - } - -} \ No newline at end of file +// .addPolygon(3, GPSPoint_PB +// .newBuilder() +// .setLat(40.20322763889314) +// .setLon(116.7284381644953) +// .build()) +//// .addPolygon(4, GPSPoint_PB +//// .newBuilder() +//// .setLat(26.819521911807858) +//// .setLon(112.57508983920647) +//// .build()) +//// .addPolygon(5, GPSPoint_PB +//// .newBuilder() +//// .setLat(26.819535210732194) +//// .setLon(112.57509174248064) +//// .build()) +//// .addPolygon(6, GPSPoint_PB +//// .newBuilder() +//// .setLat(26.81954428950259) +//// .setLon(112.5750796303722) +//// .build()) +//// .addPolygon(7, GPSPoint_PB +//// .newBuilder() +//// .setLat(26.819549148117684) +//// .setLon(112.57505350287552) +//// .build()) +// .addRoad(0, Road_PB +// .newBuilder() +// .setRoadId("200090") +// .setLaneNo("-2") +// .setTileId("556834853") +// .setBearing(154) +// .build()) +// .addRoad(1, Road_PB +// .newBuilder() +// .setRoadId("200091") +// .setLaneNo("-2") +// .setTileId("556834853") +// .setBearing(156) +// .build()) +// .build()) +// .build() +// val event = V2XEvent.RoadAI(data = child) +// while (true) { +// delay(1000) +// V2XEventManager.onAck(event) +// } +// +// } +// +// private suspend fun ensureMoGoHmiFragmentShow(): MoGoHmiProvider = suspendCancellableCoroutine { +// launch.onActivity { itx -> +// val executor = Executors.newSingleThreadScheduledExecutor() +// executor.scheduleAtFixedRate({ +// var find = +// itx.supportFragmentManager.fragments.find { it is MoGoHmiProvider } as? MoGoHmiProvider +// while (find == null) { +// find = +// itx.supportFragmentManager.fragments.find { it is MoGoHmiProvider } as? MoGoHmiProvider +// } +// while (!find.isResumed) { +// Thread.sleep(500) +// } +// it.resumeWith(Result.success(find)) +// try { +// Thread.sleep(500) +// executor.shutdownNow() +// } catch (e: Throwable) { +// e.printStackTrace() +// } +// }, 50, 500, MILLISECONDS) +// } +// } +// +// +// @Test +// fun testRoadAI() = runBlocking { +// ensureMoGoHmiFragmentShow() +// val shigu = "{\"poiType\":\"100321\",\"receiveTime\":1673506266967,\"detectTime\":1673506266924,\"id\":\"f7b1df85-895a-41c1-b05d-7356955c1c91\",\"index\":\"636136931493454271\",\"polygon\":[{\"lon\":112.57321291454436,\"lat\":26.823070465392494},{\"lon\":112.573215006931,\"lat\":26.8230675990919},{\"lon\":112.573219106955,\"lat\":26.823061914715},{\"lon\":112.573223182233,\"lat\":26.8230562153801},{\"lon\":112.573227231639,\"lat\":26.8230505007471},{\"lon\":112.573231254048,\"lat\":26.8230447704754},{\"lon\":112.573235248336,\"lat\":26.8230390242245},{\"lon\":112.573239213377,\"lat\":26.8230332616541},{\"lon\":112.573243148045,\"lat\":26.8230274824236},{\"lon\":112.573247051217,\"lat\":26.8230216861928},{\"lon\":112.573250921765,\"lat\":26.823015872621},{\"lon\":112.573254758566,\"lat\":26.823010041368},{\"lon\":112.573258560494,\"lat\":26.8230041920932},{\"lon\":112.573262326424,\"lat\":26.8229983244562},{\"lon\":112.573266055231,\"lat\":26.8229924381166},{\"lon\":112.573269779025,\"lat\":26.8229864802436},{\"lon\":112.573273466,\"lat\":26.8229805039295},{\"lon\":112.573277118207,\"lat\":26.8229745102999},{\"lon\":112.573280737695,\"lat\":26.8229685004807},{\"lon\":112.573284326516,\"lat\":26.8229624755973},{\"lon\":112.57328788672,\"lat\":26.8229564367755},{\"lon\":112.573291420358,\"lat\":26.822950385141},{\"lon\":112.573294929481,\"lat\":26.8229443218192},{\"lon\":112.573298416139,\"lat\":26.822938247936},{\"lon\":112.573301882384,\"lat\":26.822932164617},{\"lon\":112.573305330265,\"lat\":26.8229260729878},{\"lon\":112.573308761833,\"lat\":26.8229199741741},{\"lon\":112.57331217914,\"lat\":26.8229138693015},{\"lon\":112.573315584235,\"lat\":26.8229077594956},{\"lon\":112.573318940869,\"lat\":26.8229017005891},{\"lon\":112.57332227685,\"lat\":26.8228956326057},{\"lon\":112.573325593901,\"lat\":26.8228895563037},{\"lon\":112.573328893742,\"lat\":26.8228834724414},{\"lon\":112.573332178097,\"lat\":26.8228773817772},{\"lon\":112.573335448685,\"lat\":26.8228712850694},{\"lon\":112.573338707228,\"lat\":26.8228651830762},{\"lon\":112.573341955449,\"lat\":26.822859076556},{\"lon\":112.573345195068,\"lat\":26.8228529662671},{\"lon\":112.573348427807,\"lat\":26.8228468529679},{\"lon\":112.573351655387,\"lat\":26.8228407374165},{\"lon\":112.57335487953,\"lat\":26.8228346203714},{\"lon\":112.573358101958,\"lat\":26.8228285025908},{\"lon\":112.573361324391,\"lat\":26.8228223848331},{\"lon\":112.573364548551,\"lat\":26.8228162678566},{\"lon\":112.573367776161,\"lat\":26.8228101524196},{\"lon\":112.57337100894,\"lat\":26.8228040392803},{\"lon\":112.573374248612,\"lat\":26.8227979291972},{\"lon\":112.573377570805,\"lat\":26.8227916708447},{\"lon\":112.573380890942,\"lat\":26.8227854119249},{\"lon\":112.573384209049,\"lat\":26.8227791523835},{\"lon\":112.573387525157,\"lat\":26.8227728921664},{\"lon\":112.573390839291,\"lat\":26.8227666312191},{\"lon\":112.573394151482,\"lat\":26.8227603694874},{\"lon\":112.573397461756,\"lat\":26.8227541069172},{\"lon\":112.573400770143,\"lat\":26.822747843454},{\"lon\":112.573404076669,\"lat\":26.8227415790437},{\"lon\":112.573407381363,\"lat\":26.822735313632},{\"lon\":112.573410684254,\"lat\":26.8227290471645},{\"lon\":112.57341398537,\"lat\":26.8227227795872},{\"lon\":112.573417284738,\"lat\":26.8227165108456},{\"lon\":112.573420582386,\"lat\":26.8227102408855},{\"lon\":112.573423878344,\"lat\":26.8227039696526},{\"lon\":112.573427172639,\"lat\":26.8226976970928},{\"lon\":112.573430465298,\"lat\":26.8226914231516},{\"lon\":112.5736541921437,\"lat\":26.822260937315143},{\"lon\":112.57362367177457,\"lat\":26.822244991227713},{\"lon\":112.573399937477,\"lat\":26.822675492918},{\"lon\":112.573396691977,\"lat\":26.8226816946351},{\"lon\":112.573393403264,\"lat\":26.8226879586397},{\"lon\":112.573390112889,\"lat\":26.8226942213535},{\"lon\":112.573386820836,\"lat\":26.8227004828209},{\"lon\":112.573383527072,\"lat\":26.822706742987},{\"lon\":112.573380231507,\"lat\":26.8227130021005},{\"lon\":112.573376934206,\"lat\":26.8227192599775},{\"lon\":112.573373635113,\"lat\":26.8227255169308},{\"lon\":112.573370334197,\"lat\":26.8227317727439},{\"lon\":112.573367031403,\"lat\":26.8227380276418},{\"lon\":112.573363726739,\"lat\":26.822744281759},{\"lon\":112.573360420141,\"lat\":26.8227505349933},{\"lon\":112.573357111541,\"lat\":26.8227567875221},{\"lon\":112.573353801054,\"lat\":26.8227630392523},{\"lon\":112.573350488563,\"lat\":26.8227692902611},{\"lon\":112.573347174021,\"lat\":26.8227755406808},{\"lon\":112.573343849991,\"lat\":26.8227818018286},{\"lon\":112.57334059532,\"lat\":26.8227879346295},{\"lon\":112.573337344447,\"lat\":26.8227940752481},{\"lon\":112.57333410391,\"lat\":26.8228002103548},{\"lon\":112.573330872,\"lat\":26.8228063391622},{\"lon\":112.573327646909,\"lat\":26.8228124609577},{\"lon\":112.573324426983,\"lat\":26.8228185749099},{\"lon\":112.573321210588,\"lat\":26.8228246801823},{\"lon\":112.573317995803,\"lat\":26.8228307762173},{\"lon\":112.573314781099,\"lat\":26.8228368621259},{\"lon\":112.573311564666,\"lat\":26.8228429372788},{\"lon\":112.573308344862,\"lat\":26.822849000878},{\"lon\":112.573305119998,\"lat\":26.8228550522037},{\"lon\":112.573301888377,\"lat\":26.8228610905445},{\"lon\":112.573298648327,\"lat\":26.8228671151949},{\"lon\":112.573295398165,\"lat\":26.8228731254473},{\"lon\":112.573292136233,\"lat\":26.822879120603},{\"lon\":112.573288860863,\"lat\":26.8228850999821},{\"lon\":112.573285560822,\"lat\":26.8228910767817},{\"lon\":112.573282199005,\"lat\":26.822897124157},{\"lon\":112.573278821808,\"lat\":26.8229031714324},{\"lon\":112.573275437073,\"lat\":26.8229092033326},{\"lon\":112.573272042813,\"lat\":26.8229152188038},{\"lon\":112.573268637042,\"lat\":26.8229212167948},{\"lon\":112.573265217788,\"lat\":26.8229271962611},{\"lon\":112.573261783086,\"lat\":26.8229331561851},{\"lon\":112.573258330982,\"lat\":26.8229390955283},{\"lon\":112.573254859519,\"lat\":26.8229450132931},{\"lon\":112.573251366753,\"lat\":26.8229509084733},{\"lon\":112.573247850743,\"lat\":26.8229567800818},{\"lon\":112.57324430955,\"lat\":26.8229626271411},{\"lon\":112.573240741245,\"lat\":26.8229684486883},{\"lon\":112.573237142704,\"lat\":26.8229742453022},{\"lon\":112.573233541124,\"lat\":26.8229799700034},{\"lon\":112.573229900299,\"lat\":26.8229856807403},{\"lon\":112.573226220729,\"lat\":26.8229913784753},{\"lon\":112.573222503466,\"lat\":26.8229970634612},{\"lon\":112.573218749581,\"lat\":26.8230027359391},{\"lon\":112.573214960128,\"lat\":26.8230083961865},{\"lon\":112.573211136192,\"lat\":26.8230140444302},{\"lon\":112.573207278832,\"lat\":26.8230196809522},{\"lon\":112.573203389132,\"lat\":26.8230253060135},{\"lon\":112.573199468169,\"lat\":26.8230309198603},{\"lon\":112.573195517033,\"lat\":26.8230365227693},{\"lon\":112.573191536797,\"lat\":26.8230421150085},{\"lon\":112.573187548559,\"lat\":26.8230476745161},{\"lon\":112.57318546455338,\"lat\":26.823050549063097}],\"polygonRoads\":[{\"tileId\":556834853,\"roadId\":\"130372\",\"laneNo\":-1,\"bearing\":152,\"roadName\":\"雁鸣路\"},{\"tileId\":556834853,\"roadId\":\"130372\",\"laneNo\":-2,\"bearing\":152,\"roadName\":\"雁鸣路\"},{\"tileId\":556834853,\"roadId\":\"130372\",\"laneNo\":-3,\"bearing\":152,\"roadName\":\"雁鸣路\"}],\"center\":{\"lon\":112.57320982521519,\"lat\":26.82306821019599},\"centerRoad\":{\"tileId\":556834853,\"roadId\":\"130372\",\"laneNo\":-2,\"bearing\":152,\"roadName\":\"雁鸣路\"},\"obstacles\":[{\"id\":0,\"type\":1,\"score\":95,\"polygon\":[{\"lon\":112.57321361221982,\"lat\":26.823054701276522},{\"lon\":112.57321254435868,\"lat\":26.823070134384093},{\"lon\":112.57320704440468,\"lat\":26.823066238995114},{\"lon\":112.57320772757787,\"lat\":26.823050237509577}],\"boundBox\":[{\"x\":2979.852783203125,\"y\":929.4248657226562},{\"x\":3031.54296875,\"y\":929.4248657226562},{\"x\":3031.54296875,\"y\":977.5980834960938},{\"x\":2979.852783203125,\"y\":977.5980834960938}],\"center\":{\"lon\":112.57320982521519,\"lat\":26.82306821019599}}],\"imgUrl\":\"http://petchfile-1255510688.cos.ap-beijing.myqcloud.com/roadwork_image/2023-01-12/f7b1df85-895a-41c1-b05d-7356955c1c91_172_18_24_62.jpg?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDCWfcNwD5PXVWLxwejccR3Tiz5zhIkx0T%26q-sign-time%3D1673506267%3B1673513467%26q-key-time%3D1673506267%3B1673513467%26q-header-list%3D%26q-url-param-list%3D%26q-signature%3Db6b2911110c9941471cfc447d7704b9caa57a0e1\",\"ip\":\"172.18.24.62\",\"score\":95,\"radius\":0,\"type\":2,\"trianglePolygon\":[[{\"lon\":112.57321291454436,\"lat\":26.823070465392494},{\"lon\":112.573215006931,\"lat\":26.8230675990919},{\"lon\":112.573219106955,\"lat\":26.823061914715},{\"lon\":112.573223182233,\"lat\":26.8230562153801},{\"lon\":112.573227231639,\"lat\":26.8230505007471},{\"lon\":112.573231254048,\"lat\":26.8230447704754},{\"lon\":112.573235248336,\"lat\":26.8230390242245},{\"lon\":112.573239213377,\"lat\":26.8230332616541},{\"lon\":112.573243148045,\"lat\":26.8230274824236},{\"lon\":112.573247051217,\"lat\":26.8230216861928},{\"lon\":112.573250921765,\"lat\":26.823015872621},{\"lon\":112.573254758566,\"lat\":26.823010041368},{\"lon\":112.573258560494,\"lat\":26.8230041920932},{\"lon\":112.573262326424,\"lat\":26.8229983244562},{\"lon\":112.573266055231,\"lat\":26.8229924381166},{\"lon\":112.573269779025,\"lat\":26.8229864802436},{\"lon\":112.573273466,\"lat\":26.8229805039295},{\"lon\":112.573277118207,\"lat\":26.8229745102999},{\"lon\":112.573280737695,\"lat\":26.8229685004807},{\"lon\":112.573284326516,\"lat\":26.8229624755973},{\"lon\":112.57328788672,\"lat\":26.8229564367755},{\"lon\":112.573291420358,\"lat\":26.822950385141},{\"lon\":112.573294929481,\"lat\":26.8229443218192},{\"lon\":112.573298416139,\"lat\":26.822938247936},{\"lon\":112.573301882384,\"lat\":26.822932164617},{\"lon\":112.573305330265,\"lat\":26.8229260729878},{\"lon\":112.573308761833,\"lat\":26.8229199741741},{\"lon\":112.57331217914,\"lat\":26.8229138693015},{\"lon\":112.573315584235,\"lat\":26.8229077594956},{\"lon\":112.573318940869,\"lat\":26.8229017005891},{\"lon\":112.57332227685,\"lat\":26.8228956326057},{\"lon\":112.573325593901,\"lat\":26.8228895563037},{\"lon\":112.573328893742,\"lat\":26.8228834724414},{\"lon\":112.573332178097,\"lat\":26.8228773817772},{\"lon\":112.573335448685,\"lat\":26.8228712850694},{\"lon\":112.573338707228,\"lat\":26.8228651830762},{\"lon\":112.573341955449,\"lat\":26.822859076556},{\"lon\":112.573345195068,\"lat\":26.8228529662671},{\"lon\":112.573348427807,\"lat\":26.8228468529679},{\"lon\":112.573351655387,\"lat\":26.8228407374165},{\"lon\":112.57335487953,\"lat\":26.8228346203714},{\"lon\":112.573358101958,\"lat\":26.8228285025908},{\"lon\":112.573361324391,\"lat\":26.8228223848331},{\"lon\":112.573364548551,\"lat\":26.8228162678566},{\"lon\":112.573367776161,\"lat\":26.8228101524196},{\"lon\":112.57337100894,\"lat\":26.8228040392803},{\"lon\":112.573374248612,\"lat\":26.8227979291972},{\"lon\":112.573377570805,\"lat\":26.8227916708447},{\"lon\":112.573380890942,\"lat\":26.8227854119249},{\"lon\":112.573384209049,\"lat\":26.8227791523835},{\"lon\":112.573387525157,\"lat\":26.8227728921664},{\"lon\":112.573390839291,\"lat\":26.8227666312191},{\"lon\":112.573394151482,\"lat\":26.8227603694874},{\"lon\":112.573397461756,\"lat\":26.8227541069172},{\"lon\":112.573400770143,\"lat\":26.822747843454},{\"lon\":112.573404076669,\"lat\":26.8227415790437},{\"lon\":112.573407381363,\"lat\":26.822735313632},{\"lon\":112.573410684254,\"lat\":26.8227290471645},{\"lon\":112.57341398537,\"lat\":26.8227227795872},{\"lon\":112.573417284738,\"lat\":26.8227165108456},{\"lon\":112.573420582386,\"lat\":26.8227102408855},{\"lon\":112.573423878344,\"lat\":26.8227039696526},{\"lon\":112.573427172639,\"lat\":26.8226976970928},{\"lon\":112.573430465298,\"lat\":26.8226914231516},{\"lon\":112.5736541921437,\"lat\":26.822260937315143},{\"lon\":112.57362367177457,\"lat\":26.822244991227713},{\"lon\":112.573399937477,\"lat\":26.822675492918},{\"lon\":112.573396691977,\"lat\":26.8226816946351},{\"lon\":112.573393403264,\"lat\":26.8226879586397},{\"lon\":112.573390112889,\"lat\":26.8226942213535},{\"lon\":112.573386820836,\"lat\":26.8227004828209},{\"lon\":112.573383527072,\"lat\":26.822706742987},{\"lon\":112.573380231507,\"lat\":26.8227130021005},{\"lon\":112.573376934206,\"lat\":26.8227192599775},{\"lon\":112.573373635113,\"lat\":26.8227255169308},{\"lon\":112.573370334197,\"lat\":26.8227317727439},{\"lon\":112.573367031403,\"lat\":26.8227380276418},{\"lon\":112.573363726739,\"lat\":26.822744281759},{\"lon\":112.573360420141,\"lat\":26.8227505349933},{\"lon\":112.573357111541,\"lat\":26.8227567875221},{\"lon\":112.573353801054,\"lat\":26.8227630392523},{\"lon\":112.573350488563,\"lat\":26.8227692902611},{\"lon\":112.573347174021,\"lat\":26.8227755406808},{\"lon\":112.573343849991,\"lat\":26.8227818018286},{\"lon\":112.57334059532,\"lat\":26.8227879346295},{\"lon\":112.573337344447,\"lat\":26.8227940752481},{\"lon\":112.57333410391,\"lat\":26.8228002103548},{\"lon\":112.573330872,\"lat\":26.8228063391622},{\"lon\":112.573327646909,\"lat\":26.8228124609577},{\"lon\":112.573324426983,\"lat\":26.8228185749099},{\"lon\":112.573321210588,\"lat\":26.8228246801823},{\"lon\":112.573317995803,\"lat\":26.8228307762173},{\"lon\":112.573314781099,\"lat\":26.8228368621259},{\"lon\":112.573311564666,\"lat\":26.8228429372788},{\"lon\":112.573308344862,\"lat\":26.822849000878},{\"lon\":112.573305119998,\"lat\":26.8228550522037},{\"lon\":112.573301888377,\"lat\":26.8228610905445},{\"lon\":112.573298648327,\"lat\":26.8228671151949},{\"lon\":112.573295398165,\"lat\":26.8228731254473},{\"lon\":112.573292136233,\"lat\":26.822879120603},{\"lon\":112.573288860863,\"lat\":26.8228850999821},{\"lon\":112.573285560822,\"lat\":26.8228910767817},{\"lon\":112.573282199005,\"lat\":26.822897124157},{\"lon\":112.573278821808,\"lat\":26.8229031714324},{\"lon\":112.573275437073,\"lat\":26.8229092033326},{\"lon\":112.573272042813,\"lat\":26.8229152188038},{\"lon\":112.573268637042,\"lat\":26.8229212167948},{\"lon\":112.573265217788,\"lat\":26.8229271962611},{\"lon\":112.573261783086,\"lat\":26.8229331561851},{\"lon\":112.573258330982,\"lat\":26.8229390955283},{\"lon\":112.573254859519,\"lat\":26.8229450132931},{\"lon\":112.573251366753,\"lat\":26.8229509084733},{\"lon\":112.573247850743,\"lat\":26.8229567800818},{\"lon\":112.57324430955,\"lat\":26.8229626271411},{\"lon\":112.573240741245,\"lat\":26.8229684486883},{\"lon\":112.573237142704,\"lat\":26.8229742453022},{\"lon\":112.573233541124,\"lat\":26.8229799700034},{\"lon\":112.573229900299,\"lat\":26.8229856807403},{\"lon\":112.573226220729,\"lat\":26.8229913784753},{\"lon\":112.573222503466,\"lat\":26.8229970634612},{\"lon\":112.573218749581,\"lat\":26.8230027359391},{\"lon\":112.573214960128,\"lat\":26.8230083961865},{\"lon\":112.573211136192,\"lat\":26.8230140444302},{\"lon\":112.573207278832,\"lat\":26.8230196809522},{\"lon\":112.573203389132,\"lat\":26.8230253060135},{\"lon\":112.573199468169,\"lat\":26.8230309198603},{\"lon\":112.573195517033,\"lat\":26.8230365227693},{\"lon\":112.573191536797,\"lat\":26.8230421150085},{\"lon\":112.573187548559,\"lat\":26.8230476745161},{\"lon\":112.57318546455338,\"lat\":26.823050549063097}]],\"obstaclePoint\":[{\"lon\":112.573443,\"lat\":26.822538},{\"lon\":112.573691,\"lat\":26.822676},{\"lon\":112.573021,\"lat\":26.823149},{\"lon\":112.572974,\"lat\":26.823199}],\"createTime\":1673506267760,\"createTimeStr\":\"2023-01-12 14:51:07\"}" +// val road1 = "{\"poiType\":\"100061\",\"receiveTime\":1673509755649,\"detectTime\":1673509755637,\"id\":\"86447e30-2dfc-4a27-8d01-41ffe9a9a7fe\",\"index\":\"636136931493457343\",\"polygon\":[{\"lon\":112.57337137520945,\"lat\":26.822950000610152},{\"lon\":112.5733703998375,\"lat\":26.82294943400411},{\"lon\":112.57336923793872,\"lat\":26.82294944578748},{\"lon\":112.57336827709125,\"lat\":26.82295003202963},{\"lon\":112.57336786590433,\"lat\":26.822950822795498},{\"lon\":112.57332583348149,\"lat\":26.823144415135413},{\"lon\":112.57332583904886,\"lat\":26.823145130116597},{\"lon\":112.57332615359141,\"lat\":26.82314578706645},{\"lon\":112.57332672775591,\"lat\":26.823146282906478},{\"lon\":112.57332747145331,\"lat\":26.823146539837108},{\"lon\":112.57332807078356,\"lat\":26.823146549872188},{\"lon\":112.57332882464814,\"lat\":26.82314631801647},{\"lon\":112.57332941903356,\"lat\":26.823145841742402},{\"lon\":112.57332970267485,\"lat\":26.82314536795171},{\"lon\":112.57339652767452,\"lat\":26.82297757920771},{\"lon\":112.57339644737766,\"lat\":26.82297673161999},{\"lon\":112.57339607387638,\"lat\":26.822976136665098},{\"lon\":112.57337137520945,\"lat\":26.822950000610152}],\"polygonRoads\":[{\"tileId\":556834853,\"roadId\":\"130314\",\"laneNo\":-1,\"bearing\":330,\"roadName\":\"雁鸣路\"},{\"tileId\":556834853,\"roadId\":\"130314\",\"laneNo\":-2,\"bearing\":330,\"roadName\":\"雁鸣路\"},{\"tileId\":556834853,\"roadId\":\"130314\",\"laneNo\":-3,\"bearing\":330,\"roadName\":\"雁鸣路\"},{\"tileId\":556834853,\"roadId\":\"130583\",\"laneNo\":-1,\"bearing\":278}],\"center\":{\"lon\":112.57336404707121,\"lat\":26.823024407262803},\"centerRoad\":{\"tileId\":556834853,\"roadId\":\"130314\",\"laneNo\":-2,\"bearing\":330,\"roadName\":\"雁鸣路\"},\"obstacles\":[{\"id\":0,\"type\":1,\"score\":88,\"polygon\":[{\"lon\":112.57334137965555,\"lat\":26.82313245733589},{\"lon\":112.573329020958,\"lat\":26.823145531571242},{\"lon\":112.57332663570918,\"lat\":26.823144025991855},{\"lon\":112.57333875695714,\"lat\":26.823130823353114}],\"boundBox\":[{\"x\":1439.8624267578125,\"y\":893.4229736328125},{\"x\":1474.45361328125,\"y\":893.4229736328125},{\"x\":1474.45361328125,\"y\":966.433837890625},{\"x\":1439.8624267578125,\"y\":966.433837890625}],\"center\":{\"lon\":112.57332779256919,\"lat\":26.823144756804734}},{\"id\":1,\"type\":1,\"score\":87,\"polygon\":[{\"lon\":112.57339986657128,\"lat\":26.822898951544797},{\"lon\":112.5733716620538,\"lat\":26.822952992001163},{\"lon\":112.57336786188131,\"lat\":26.822949186370185},{\"lon\":112.57339561566401,\"lat\":26.822894141465785}],\"boundBox\":[{\"x\":2085.054443359375,\"y\":503.0662841796875},{\"x\":2116.11865234375,\"y\":503.0662841796875},{\"x\":2116.11865234375,\"y\":559.9113159179688},{\"x\":2085.054443359375,\"y\":559.9113159179688}],\"center\":{\"lon\":112.5733698249888,\"lat\":26.822951164464232}},{\"id\":2,\"type\":1,\"score\":71,\"polygon\":[{\"lon\":112.57342641528835,\"lat\":26.82293191667262},{\"lon\":112.57339610867105,\"lat\":26.82297860774548},{\"lon\":112.5733928192764,\"lat\":26.822975877911627},{\"lon\":112.57342270277888,\"lat\":26.822928610829003}],\"boundBox\":[{\"x\":1873.2490234375,\"y\":507.2391357421875},{\"x\":1900.5283203125,\"y\":507.2391357421875},{\"x\":1900.5283203125,\"y\":562.299560546875},{\"x\":1873.2490234375,\"y\":562.299560546875}],\"center\":{\"lon\":112.57339452365564,\"lat\":26.822977300519444}}],\"imgUrl\":\"http://petchfile-1255510688.cos.ap-beijing.myqcloud.com/roadwork_image/2023-01-12/86447e30-2dfc-4a27-8d01-41ffe9a9a7fe_172_18_24_62.jpg?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDCWfcNwD5PXVWLxwejccR3Tiz5zhIkx0T%26q-sign-time%3D1673509757%3B1673516957%26q-key-time%3D1673509757%3B1673516957%26q-header-list%3D%26q-url-param-list%3D%26q-signature%3D557de14ddfb999d35ddef9e23b3532d9d299c62f\",\"ip\":\"172.18.24.62\",\"score\":82,\"radius\":0,\"type\":1,\"createTime\":1673509757496,\"createTimeStr\":\"2023-01-12 15:49:17\"}" +// val road2 = "{\"poiType\":\"100061\",\"receiveTime\":1673509756306,\"detectTime\":1673509756290,\"id\":\"be6a2000-a96c-42c8-a7ef-f83388d84858\",\"index\":\"636136931493532287\",\"polygon\":[{\"lon\":112.5733515539896,\"lat\":26.823143145432386},{\"lon\":112.57335140084462,\"lat\":26.823142454672727},{\"lon\":112.57335096472467,\"lat\":26.823141869074952},{\"lon\":112.57335031202503,\"lat\":26.82314147779103},{\"lon\":112.57334954211333,\"lat\":26.82314134039038},{\"lon\":112.57334877220161,\"lat\":26.82314147779103},{\"lon\":112.573348119502,\"lat\":26.823141869074952},{\"lon\":112.57334768338202,\"lat\":26.823142454672727},{\"lon\":112.57334753023707,\"lat\":26.823143145432386},{\"lon\":112.57334768338202,\"lat\":26.82314383619207},{\"lon\":112.57334811950196,\"lat\":26.82314442178987},{\"lon\":112.5733487722016,\"lat\":26.823144813073792},{\"lon\":112.57334954211333,\"lat\":26.823144950474443},{\"lon\":112.57335031202504,\"lat\":26.823144813073792},{\"lon\":112.57335096472468,\"lat\":26.82314442178987},{\"lon\":112.57335140084464,\"lat\":26.82314383619207},{\"lon\":112.5733515539896,\"lat\":26.823143145432386}],\"polygonRoads\":[{\"tileId\":556834853,\"roadId\":\"130314\",\"laneNo\":-4,\"bearing\":332,\"roadName\":\"雁鸣路\"}],\"center\":{\"lon\":112.57334952644263,\"lat\":26.823143141971546},\"centerRoad\":{\"tileId\":556834853,\"roadId\":\"130314\",\"laneNo\":-4,\"bearing\":332,\"roadName\":\"雁鸣路\"},\"obstacles\":[{\"id\":0,\"type\":1,\"score\":72,\"polygon\":[{\"lon\":112.57341760772391,\"lat\":26.823104379136176},{\"lon\":112.57335121413183,\"lat\":26.82314367391432},{\"lon\":112.57334751791018,\"lat\":26.823142500693834},{\"lon\":112.57341321183773,\"lat\":26.82310322131963}],\"boundBox\":[{\"x\":1551.2252197265625,\"y\":352.58837890625},{\"x\":1562.4649658203125,\"y\":352.58837890625},{\"x\":1562.4649658203125,\"y\":376.17327880859375},{\"x\":1551.2252197265625,\"y\":376.17327880859375}],\"center\":{\"lon\":112.57334952644263,\"lat\":26.823143141971546}}],\"imgUrl\":\"http://petchfile-1255510688.cos.ap-beijing.myqcloud.com/roadwork_image/2023-01-12/be6a2000-a96c-42c8-a7ef-f83388d84858_172_18_24_42.jpg?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDCWfcNwD5PXVWLxwejccR3Tiz5zhIkx0T%26q-sign-time%3D1673509758%3B1673516958%26q-key-time%3D1673509758%3B1673516958%26q-header-list%3D%26q-url-param-list%3D%26q-signature%3Db2682464078ae53eae6e87f924abe17fa7c04ac8\",\"ip\":\"172.18.24.42\",\"score\":72,\"radius\":0,\"type\":1,\"createTime\":1673509758511,\"createTimeStr\":\"2023-01-12 15:49:18\"}" +// val jingzhi1 = "{\"poiType\":\"100321\",\"detectTime\":1673506266924,\"id\":\"f7b1df85-895a-41c1-b05d-7356955c1c91\",\"index\":\"636136931493454271\",\"polygon\":[],\"center\":{\"lon\":112.57320982521519,\"lat\":26.82306821019599},\"centerRoad\":{\"tileId\":556834853,\"laneNo\":-2,\"bearing\":152},\"score\":95,\"radius\":0,\"type\":2}" +// val jingzhi2 = "{\"poiType\":\"100321\",\"detectTime\":1673506266924,\"id\":\"f7b1df85-895a-41c1-b05d-7356955c1c91\",\"index\":\"636136931493454271\",\"polygon\":[],\"center\":{\"lon\":112.57320982521519,\"lat\":26.82306821019599},\"centerRoad\":{\"tileId\":556834853,\"laneNo\":-2,\"bearing\":152},\"score\":95,\"radius\":0,\"type\":2}" +// val jingzhi3 = "{\"poiType\":\"100321\",\"detectTime\":1673506266924,\"id\":\"f7b1df85-895a-41c1-b05d-7356955c1c91\",\"index\":\"636136931493454271\",\"polygon\":[],\"center\":{\"lon\":112.57320982521519,\"lat\":26.82306821019599},\"centerRoad\":{\"tileId\":556834853,\"laneNo\":-2,\"bearing\":152},\"score\":95,\"radius\":0,\"type\":2}" +// while (true) { +// delay(1000) +// V2XEventManager.onAck(V2XEvent.RoadEventX(data = GsonUtils.fromJson(shigu, V2XRoadXData::class.java))) +// V2XEventManager.onAck(V2XEvent.RoadEventX(data = GsonUtils.fromJson(road1, V2XRoadXData::class.java))) +// V2XEventManager.onAck(V2XEvent.RoadEventX(data = GsonUtils.fromJson(road2, V2XRoadXData::class.java))) +// } +// } +// +//} \ No newline at end of file diff --git a/config.gradle b/config.gradle index 21d21eb8a1..cf13694b91 100644 --- a/config.gradle +++ b/config.gradle @@ -28,6 +28,8 @@ ext { amapsearch : "com.amap.api:search:9.5.0", amaplocation : "com.amap.api:location:6.2.0", + downloader : "com.mogo.core.net:downloader:1.0.5_stable", + // json 转换 gson : "com.google.code.gson:gson:2.8.4", // 内存泄漏检测 diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt index 27b1411926..ed35a92c54 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt @@ -1,7 +1,6 @@ package com.mogo.eagle.core.function.datacenter.obu import android.content.Context -import android.util.Log import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.HmiBuildConfig @@ -14,14 +13,13 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager -import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager import com.mogo.eagle.core.function.call.obu.* import com.mogo.eagle.core.function.call.v2x.CallerLimitingVelocityListenerManager import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager import com.mogo.eagle.core.function.datacenter.obu.drawer.* import com.mogo.eagle.core.function.datacenter.obu.utils.TrafficDataConvertUtilsNew -import com.mogo.eagle.core.utilcode.breakpoint.Config +import com.mogo.eagle.core.utilcode.download.Config import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OBU import com.mogo.eagle.core.utilcode.util.FileUtils diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt index b7de87b1f8..94a365252f 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt @@ -2,7 +2,6 @@ package com.zhjt.mogo_core_function_devatools import android.app.Activity import android.content.Context -import android.util.Log import android.view.View import android.view.ViewGroup import com.alibaba.android.arouter.facade.annotation.Route @@ -268,7 +267,7 @@ class DevaToolsProvider : IDevaToolsProvider { } override fun updateUpgradeProgress() { - upgradeManager.updateUpgradeProgress(mContext!!) + upgradeManager.updateUpgradeProgress() } override fun showStatusBar(ctx: Context, container: ViewGroup) { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeAppNetWorkManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeAppNetWorkManager.kt index 38ca984932..ec176f37c3 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeAppNetWorkManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeAppNetWorkManager.kt @@ -2,7 +2,6 @@ package com.zhjt.mogo_core_function_devatools.upgrade import android.content.* import android.util.* -import com.elegant.utils.UiThreadHandler import com.mogo.cloud.passport.* import com.mogo.commons.constants.* import com.mogo.commons.utils.* @@ -14,7 +13,7 @@ import com.mogo.eagle.core.function.call.patch.CallerPatchManager.addPatchInfo import com.mogo.eagle.core.function.call.patch.CallerPatchManager.isPatchAccept import com.mogo.eagle.core.network.* import com.mogo.eagle.core.network.utils.* -import com.mogo.eagle.core.utilcode.breakpoint.Config +import com.mogo.eagle.core.utilcode.download.Config import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.* import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt index 0879885a93..727f2395ee 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt @@ -15,10 +15,9 @@ import com.mogo.eagle.core.function.call.devatools.* import com.mogo.eagle.core.function.call.patch.CallerPatchManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.updateStatusBarDownloadView import com.mogo.eagle.core.function.call.obu.CallerObuApiManager -import com.mogo.eagle.core.utilcode.breakpoint.Config -import com.mogo.eagle.core.utilcode.breakpoint.bean.ThreadBean -import com.mogo.eagle.core.utilcode.breakpoint.callback.IDownload -import com.mogo.eagle.core.utilcode.breakpoint.utils.DownloadUtils +import com.mogo.eagle.core.utilcode.download.Config +import com.mogo.eagle.core.utilcode.download.callback.IDownloadListener +import com.mogo.eagle.core.utilcode.download.DownloadUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.mogo.logger.Logger @@ -31,7 +30,7 @@ import kotlinx.coroutines.* import java.io.IOException import java.util.concurrent.ConcurrentHashMap -class UpgradeManager : IDownload { +class UpgradeManager : IDownloadListener { companion object { @@ -55,55 +54,29 @@ class UpgradeManager : IDownload { fun downLoadPackage(context: Context, type: DownloadType, downloadKey: String, downloadUrl: String) { CallerLogger.d("$M_DEVA$TAG", "UpgradeManager downLoadPackage = " + downloadUrl.contains(".zip") + "---type =" + type + "----downloadKey = $downloadKey ---downloadUrl = $downloadUrl") types[downloadUrl] = type - DownloadUtils.downLoad( - context, - downloadUrl, - if (type == OBU) Config.downLoadObuPath else Config.downLoadPath, - downloadKey, - 5, - this - ) + DownloadUtils.downLoad(context, downloadUrl, if (type == OBU) Config.downLoadObuPath else Config.downLoadPath, downloadKey, this) } - override fun onStart(downloadUrl: String?) { - CallerLogger.d("$M_DEVA$TAG","onStart downloadUrl : $downloadUrl") - if (downloadUrl != null) { - CallerDevaToolsUpgradeListenerManager.invokeUpgradeStart(downloadUrl) - val type = types[downloadUrl] - if (type == PATCH || type == APK) { - scope.launch { - CallerDevaToolsManager.upgradeProvider()?.recordDownloadStart(downloadUrl) - } + override fun onStart(url: String) { + CallerLogger.d("$M_DEVA$TAG","onStart downloadUrl : $url") + CallerDevaToolsUpgradeListenerManager.invokeUpgradeStart(url) + val type = types[url] + if (type == PATCH || type == APK) { + scope.launch { + CallerDevaToolsManager.upgradeProvider()?.recordDownloadStart(url) } } } - override fun onPause(downloadUrl: String?, threadBean: ThreadBean?) { - CallerLogger.d("$M_DEVA$TAG","onPause downloadUrl : $downloadUrl , threadBean : $threadBean") - if (downloadUrl != null) { - CallerDevaToolsUpgradeListenerManager.invokeUpgradePause(downloadUrl) - val type = types[downloadUrl] - if (type == PATCH || type == APK) { - scope.launch { - CallerDevaToolsManager.upgradeProvider()?.recordDownloadPause(downloadUrl) - } - } - } + override fun onProgress(url: String, downloaded: Long, total: Long) { + CallerLogger.d("$M_DEVA$TAG"," onProgress downloadUrl : $url , downloaded: $downloaded, total: $total") + CallerDevaToolsUpgradeListenerManager.invokeUpgradeProgress(url, (downloaded * 100 / total).toInt()) + } - override fun onProgress(downloadUrl: String?, length: Int) { - CallerLogger.d("$M_DEVA$TAG"," onProgress downloadUrl : $downloadUrl , length : $length") - if (downloadUrl != null) { - CallerDevaToolsUpgradeListenerManager.invokeUpgradeProgress(downloadUrl, length) - } - } - - override fun onFinished(downloadUrl: String?, threadBean: ThreadBean?, localPath: String) { - Log.d(TAG, "onFinished downloadUrl = $downloadUrl") - if (downloadUrl == null) { - return - } - doOnFinished(downloadUrl, localPath) + override fun onFinished(url: String, path: String) { + Log.d(TAG, "onFinished downloadUrl = $url") + doOnFinished(url, path) } private fun doOnFinished(downloadUrl: String, localPath: String) { @@ -215,25 +188,23 @@ class UpgradeManager : IDownload { } } - override fun onError(downloadUrl: String?, errorMsg: String?) { - CallerLogger.d("$M_DEVA$TAG","onError downloadUrl : $downloadUrl , errorMsg : $errorMsg") - if (downloadUrl != null) { - CallerDevaToolsUpgradeListenerManager.invokeUpgradeError(downloadUrl, errorMsg ?: "未知错误") - val type = types[downloadUrl] - if (type == APK || type == PATCH) { - scope.launch { upgradeProvider?.recordDownloadFailed(downloadUrl,errorMsg ?: "下载失败") } - } else if (type == OBU) { - CallerLogger.e("${SceneConstant.M_OBU}${MogoObuConst.TAG_UPGRADE_OBU}", "----updateObuUpgradeStatus errorMsg = $errorMsg ") - //下载失败,删除文件夹 - CallerObuApiManager.deleteObuFile() - } + override fun onError(url: String, error: String?) { + CallerLogger.d("$M_DEVA$TAG","onError downloadUrl : $url , errorMsg : $error") + CallerDevaToolsUpgradeListenerManager.invokeUpgradeError(url, error ?: "未知错误") + val type = types[url] + if (type == APK || type == PATCH) { + scope.launch { upgradeProvider?.recordDownloadFailed(url, error ?: "下载失败") } + } else if (type == OBU) { + CallerLogger.e("${SceneConstant.M_OBU}${MogoObuConst.TAG_UPGRADE_OBU}", "----updateObuUpgradeStatus errorMsg = $error ") + //下载失败,删除文件夹 + CallerObuApiManager.deleteObuFile() } } /** * 鹰眼app下载监听 */ - fun updateUpgradeProgress(context: Context) { + fun updateUpgradeProgress() { CallerDevaToolsUpgradeListenerManager.addListener( TAG, object : IMogoDevaToolsUpgradeListener { diff --git a/core/mogo-core-utils/build.gradle b/core/mogo-core-utils/build.gradle index 9cadc952b7..5109996108 100644 --- a/core/mogo-core-utils/build.gradle +++ b/core/mogo-core-utils/build.gradle @@ -74,6 +74,7 @@ dependencies { implementation rootProject.ext.dependencies.coroutinesandroid implementation rootProject.ext.dependencies.androidautoSize implementation rootProject.ext.dependencies.litezxing + implementation rootProject.ext.dependencies.downloader api rootProject.ext.dependencies.mogoaicloudpassport api rootProject.ext.dependencies.mogoaicloudnetwork diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/bean/FileBean.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/bean/FileBean.java deleted file mode 100644 index a1dd2dd74d..0000000000 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/bean/FileBean.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.mogo.eagle.core.utilcode.breakpoint.bean; - -import java.io.Serializable; - -public class FileBean implements Serializable { - - private int id; - private String savePath; - private String fileName; - private String url; - private int length; - private int finished; - private int threadCount; - - public FileBean() { - } - - public FileBean(int id, String fileName, String url, int finished) { - this.id = id; - this.fileName = fileName; - this.url = url; - this.finished = finished; - } - public FileBean(int id, String savePath,String fileName, String url, int finished) { - this.id = id; - this.savePath = savePath; - this.fileName = fileName; - this.url = url; - this.finished = finished; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getSavePath() { - return savePath; - } - - public void setSavePath(String savePath) { - this.savePath = savePath; - } - - public String getFileName() { - return fileName; - } - - public void setFileName(String fileName) { - this.fileName = fileName; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public int getLength() { - return length; - } - - public void setLength(int length) { - this.length = length; - } - - - public int getFinished() { - return finished; - } - - public void setFinished(int finished) { - this.finished = finished; - } - - public int getThreadCount() { - return threadCount; - } - - public void setThreadCount(int threadCount) { - this.threadCount = threadCount; - } - - @Override - public String toString() { - int progress = (int) (finished*1.0f/length *100); - return "FileBean{" + - "id=" + id + - ", fileName='" + fileName + '\'' + - ", length=" + length + - ", finished=" + finished + - ",progress="+progress+ - '}'; - } -} diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/bean/ThreadBean.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/bean/ThreadBean.java deleted file mode 100644 index afbfb90014..0000000000 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/bean/ThreadBean.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.mogo.eagle.core.utilcode.breakpoint.bean; - -import java.io.Serializable; - -public class ThreadBean implements Serializable{ - - private int id; - private String url; - private int start; - private int end; - private int finished; - - public ThreadBean() { - } - - public ThreadBean(int id, String url, int start, int end, int finished) { - this.id = id; - this.url = url; - this.start = start; - this.end = end; - this.finished = finished; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public int getStart() { - return start; - } - - public void setStart(int start) { - this.start = start; - } - - public int getEnd() { - return end; - } - - public void setEnd(int end) { - this.end = end; - } - - public int getFinished() { - return finished; - } - - public void setFinished(int finished) { - this.finished = finished; - } - - @Override - public String toString() { - return "ThreadBean{" + - "id=" + id + - ", url='" + url + '\'' + - ", start=" + start + - ", end=" + end + - ", finished=" + finished + - '}'; - } -} diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/callback/DownloadCallBack.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/callback/DownloadCallBack.java deleted file mode 100644 index 31ada1d8f5..0000000000 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/callback/DownloadCallBack.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.mogo.eagle.core.utilcode.breakpoint.callback; - - -import com.mogo.eagle.core.utilcode.breakpoint.bean.ThreadBean; - -/** - * 下载进度回调 - */ -public interface DownloadCallBack { - - /** - * 开始下载 - */ - void startDownload(String url); - - /** - * 暂停回调 - * @param threadBean - */ - void pauseCallBack(String url,ThreadBean threadBean); - /** - * 下载进度 - * @param length - */ - void progressCallBack(String url,int length); - - /** - * 线程下载完毕 - * - * @param threadBean - * @param localPath - */ - void threadDownLoadFinished(String url, ThreadBean threadBean, String localPath); - - /** - * 下载错误 - * @param msg - */ - void errorCallBack(String url, String msg); -} diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/callback/IDownload.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/callback/IDownload.java deleted file mode 100644 index d08bf5500a..0000000000 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/callback/IDownload.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.mogo.eagle.core.utilcode.breakpoint.callback; - -import com.mogo.eagle.core.utilcode.breakpoint.bean.ThreadBean; - -public interface IDownload { - - /** - * 开始下载 - */ - void onStart(String url); - - /** - * 暂停回调 - * - * @param threadBean - */ - void onPause(String url,ThreadBean threadBean); - - /** - * 下载进度 - * - * @param length - */ - void onProgress(String url,int length); - - /** - * 线程下载完毕 - * - * @param threadBean - * @param localPath - */ - void onFinished(String url, ThreadBean threadBean, String localPath); - - /** - * 错误信息回调 - * @param errorMsg - */ - void onError(String url,String errorMsg); -} diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/db/DBHelper.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/db/DBHelper.java deleted file mode 100644 index c6fbb105ab..0000000000 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/db/DBHelper.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.mogo.eagle.core.utilcode.breakpoint.db; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; - -public class DBHelper extends SQLiteOpenHelper{ - - private static final String DB_NAME = "download.db"; - private static DBHelper dbHelper = null; - - public static DBHelper getInstance(Context context){ - if(dbHelper==null) dbHelper = new DBHelper(context); - return dbHelper; - } - - private DBHelper(Context context) { - super(context, DB_NAME, null, 1); - } - - @Override - public void onCreate(SQLiteDatabase db) { - String sql = "create table thread_info (_id integer primary key autoincrement," + - "thread_id integer,url text,start integer,ends integer,finished integer)"; - db.execSQL(sql); - } - - @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - - } -} diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/db/dao/ThreadDao.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/db/dao/ThreadDao.java deleted file mode 100644 index 0481d093fa..0000000000 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/db/dao/ThreadDao.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.mogo.eagle.core.utilcode.breakpoint.db.dao; - - -import com.mogo.eagle.core.utilcode.breakpoint.bean.ThreadBean; - -import java.util.List; - -public interface ThreadDao { - /** - * 插入下载线程信息 - * @param threadBean - */ - void insertThread(ThreadBean threadBean); - - /** - * 更新下载线程信息 - * @param url - * @param thread_id - * @param finished - */ - void updateThread(String url, int thread_id, int finished); - - /** - * 删除下载线程 - * @param url - */ - void deleteThread(String url); - - /** - * 获取下载线程 - * @param url - * @return - */ - List getThreads(String url); - - /** - * 判断下载线程是否存在 - * @param url - * @param thread_id - * @return - */ - boolean isExists(String url, int thread_id); -} diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/db/impl/ThreadDaoImpl.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/db/impl/ThreadDaoImpl.java deleted file mode 100644 index c537b0ff60..0000000000 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/db/impl/ThreadDaoImpl.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.mogo.eagle.core.utilcode.breakpoint.db.impl; - -import android.content.Context; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; - -import com.mogo.eagle.core.utilcode.breakpoint.bean.ThreadBean; -import com.mogo.eagle.core.utilcode.breakpoint.db.DBHelper; -import com.mogo.eagle.core.utilcode.breakpoint.db.dao.ThreadDao; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class ThreadDaoImpl implements ThreadDao { - - private final DBHelper dbHelper; - - public ThreadDaoImpl(Context context){ - dbHelper = DBHelper.getInstance(context); - } - - @Override - public synchronized void insertThread(ThreadBean threadBean) { - SQLiteDatabase db = null; - try { - db = dbHelper.getWritableDatabase(); - db.beginTransaction(); - db.execSQL("insert into thread_info ( thread_id, url, start, ends, finished) values (?,?,?,?,?)" - ,new Object[]{threadBean.getId(),threadBean.getUrl(),threadBean.getStart(),threadBean.getEnd(),threadBean.getFinished()}); - db.endTransaction(); - db.setTransactionSuccessful(); - } catch (Throwable t) { - t.printStackTrace(); - } finally { - try { - if (db != null) { - db.close(); - } - } catch (Throwable t) { - t.printStackTrace(); - } - } - } - - @Override - public synchronized void updateThread(String url, int thread_id, int finished) { - SQLiteDatabase db = null; - try { - db = dbHelper.getWritableDatabase(); - db.beginTransaction(); - db.execSQL("update thread_info set finished = ? where url = ? and thread_id = ?" - ,new Object[]{finished,url,thread_id}); - db.endTransaction(); - db.setTransactionSuccessful(); - } catch (Throwable t) { - t.printStackTrace(); - } finally { - try { - if (db != null) { - db.close(); - } - } catch (Throwable t) { - t.printStackTrace(); - } - } - } - - @Override - public void deleteThread(String url) { - SQLiteDatabase db = null; - try { - db = dbHelper.getWritableDatabase(); - db.beginTransaction(); - db.execSQL("delete from thread_info where url = ?",new Object[]{url}); - db.endTransaction(); - db.setTransactionSuccessful(); - } catch (Throwable t) { - t.printStackTrace(); - } finally { - try { - if (db != null) { - db.close(); - } - } catch (Throwable t) { - t.printStackTrace(); - } - - } - } - - @Override - public List getThreads(String url) { - SQLiteDatabase db = null; - Cursor cursor = null; - try { - db = dbHelper.getReadableDatabase(); - cursor = db.rawQuery("select * from thread_info where url = ?",new String[]{url}); - List threadBeanList = new ArrayList<>(); - while (cursor.moveToNext()){ - ThreadBean bean = new ThreadBean(); - bean.setId(cursor.getInt(cursor.getColumnIndex("thread_id"))); - bean.setUrl(cursor.getString(cursor.getColumnIndex("url"))); - bean.setStart(cursor.getInt(cursor.getColumnIndex("start"))); - bean.setEnd(cursor.getInt(cursor.getColumnIndex("ends"))); - bean.setFinished(cursor.getInt(cursor.getColumnIndex("finished"))); - threadBeanList.add(bean); - } - return threadBeanList; - } catch (Throwable t) { - t.printStackTrace(); - } finally { - try { - if (cursor != null) { - cursor.close(); - } - } catch (Throwable t) { - t.printStackTrace(); - } - - try { - if (db != null) { - db.close(); - } - } catch (Throwable t) { - t.printStackTrace(); - } - } - return Collections.emptyList(); - } - - @Override - public boolean isExists(String url, int thread_id) { - SQLiteDatabase db = null; - Cursor cursor = null; - try { - db = dbHelper.getReadableDatabase(); - cursor = db.rawQuery("select * from thread_info where url = ? and thread_id = ?", new String[]{url,thread_id+""}); - return cursor.moveToNext(); - } catch (Throwable t) { - t.printStackTrace(); - } finally { - try { - if (cursor != null) { - cursor.close(); - } - } catch (Throwable t) { - t.printStackTrace(); - } - try { - if (db != null) { - db.close(); - } - } catch (Throwable t) { - t.printStackTrace(); - } - } - return false; - } -} diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/event/DownloadData.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/event/DownloadData.java deleted file mode 100644 index e57dc94f90..0000000000 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/event/DownloadData.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.mogo.eagle.core.utilcode.breakpoint.event; - -public class DownloadData { - private String url; - private int progress; - private int length; - private String msg; - private String filePath; - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public int getProgress() { - return progress; - } - - public void setProgress(int progress) { - this.progress = progress; - } - - public int getLength() { - return length; - } - - public void setLength(int length) { - this.length = length; - } - - public String getMsg() { - return msg; - } - - public void setMsg(String msg) { - this.msg = msg; - } - - public String getFilePath() { - return filePath; - } - - public void setFilePath(String filePath) { - this.filePath = filePath; - } -} diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/services/DownloadService.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/services/DownloadService.java deleted file mode 100644 index 2aaff2e53e..0000000000 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/services/DownloadService.java +++ /dev/null @@ -1,206 +0,0 @@ -package com.mogo.eagle.core.utilcode.breakpoint.services; - -import static com.mogo.eagle.core.utilcode.breakpoint.Config.DOWN_LOAD_TAG; - -import android.content.Context; -import android.content.Intent; -import android.util.Log; - -import com.mogo.eagle.core.utilcode.breakpoint.bean.FileBean; -import com.mogo.eagle.core.utilcode.breakpoint.bean.ThreadBean; -import com.mogo.eagle.core.utilcode.breakpoint.callback.DownloadCallBack; -import com.mogo.eagle.core.utilcode.breakpoint.callback.IDownload; -import com.mogo.eagle.core.utilcode.breakpoint.event.DownloadData; -import com.mogo.eagle.core.utilcode.breakpoint.thread.DownloadTask; -import com.mogo.eagle.core.utilcode.breakpoint.thread.InitThread; -import com.mogo.eagle.core.utilcode.util.NetworkUtils; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -/** - * 下载服务 - */ -public class DownloadService implements InitThread.InitCallBack, DownloadCallBack, NetworkUtils.OnNetworkStatusChangedListener { - - public static final String ACTION_START = "ACTION_START"; - public static final String ACTION_PAUSE = "ACTION_PAUSE"; - private static final byte[] obj = new byte[0]; - private static volatile DownloadService downloadService; - private final Context mContext; - /** - * 下载任务集合 - */ - private final List downloadTasks = new ArrayList<>(); - private final Map callBacks = new ConcurrentHashMap<>(); - public static ExecutorService executorService = Executors.newCachedThreadPool(); - - private IDownload mIDownload = null; - - private DownloadService(Context context) { - mContext = context; - NetworkUtils.registerNetworkStatusChangedListener(this); - } - - public static DownloadService getInstance(Context context) { - if (downloadService == null) { - synchronized (obj) { - if (downloadService == null) { - downloadService = new DownloadService(context); - } - } - } - return downloadService; - } - - public synchronized void onStartCommand(Intent intent, IDownload iDownload) { - mIDownload = iDownload; - - if (intent == null) { - Log.e(DOWN_LOAD_TAG, "onStartCommand intent is null"); - return; - } - - String action = intent.getAction(); - if (action == null) { - Log.e(DOWN_LOAD_TAG, "onStartCommand action is null"); - return; - } - - FileBean fileBean = (FileBean) intent.getSerializableExtra("FileBean"); - if (fileBean == null) { - Log.e(DOWN_LOAD_TAG, "onStartCommand bean is null"); - return; - } - - if (action.equals(ACTION_START)) { - Log.d(DOWN_LOAD_TAG, "ACTION_START"); - if (downloadTasks.size() > 0) { - for (DownloadTask downloadTask : downloadTasks) { - String url = downloadTask.getFileBean().getUrl(); - if (url.equals(fileBean.getUrl())) { - //如果下载任务中以后该文件的下载任务 则直接返回 - iDownload.onError(fileBean.getUrl(), "下载任务已存在"); - } - } - } - executorService.execute(new InitThread(fileBean, this)); - } else if (intent.getAction().equals(ACTION_PAUSE)) { - DownloadTask pauseTask = null; - if (downloadTasks.size() > 0) { - for (DownloadTask downloadTask : downloadTasks) { - if (downloadTask.getFileBean().getUrl().equals(fileBean.getUrl())) { - downloadTask.pauseDownload(); - pauseTask = downloadTask; - break; - } - } - //将下载任务移除 - downloadTasks.remove(pauseTask); - } - } - } - - //下载线程初始化完毕 - @Override - public void initSuccess(FileBean fileBean) { - Log.d(DOWN_LOAD_TAG, "length:" + fileBean.getLength()); - DownloadData downloadData = new DownloadData(); - downloadData.setUrl(fileBean.getUrl()); - downloadData.setMsg("开始下载"); - downloadData.setLength(fileBean.getLength()); - //开始下载 - DownloadTask downloadTask = new DownloadTask(mContext, fileBean, fileBean.getThreadCount(), this); - downloadTasks.add(downloadTask); - } - - @Override - public void initFailed(DownloadData downloadData) { - Log.e(DOWN_LOAD_TAG, "initFailed : " + downloadData.getMsg()); - IDownload iDownload = callBacks.get(downloadData.getUrl()); - if (iDownload != null) { - iDownload.onError(downloadData.getUrl(), "initFailed : " + downloadData.getMsg()); - } - } - - @Override - public void startDownload(String url) { - callBacks.put(url, mIDownload); - - IDownload iDownload = callBacks.get(url); - if (iDownload != null) { - iDownload.onStart(url); - } - } - - @Override - public void pauseCallBack(String url, ThreadBean threadBean) { - IDownload iDownload = callBacks.get(url); - if (iDownload != null) { - iDownload.onPause(url, threadBean); - } - } - - @Override - public void progressCallBack(String url, int length) { - IDownload iDownload = callBacks.get(url); - if (iDownload != null) { - iDownload.onProgress(url, length); - } - } - - @Override - public void threadDownLoadFinished(String url, ThreadBean threadBean, String localPath) { - IDownload iDownload = callBacks.get(url); - Log.d(DOWN_LOAD_TAG, "下载完成 -----> iDownload = " + iDownload); - Log.d("UpgradeManager", "-------threadDownLoadFinished localPath = " + localPath + "---iDownload = " + iDownload); - if (iDownload != null) { - iDownload.onFinished(url, threadBean, localPath); - } - } - - @Override - public void errorCallBack(String url, String msg) { - IDownload iDownload = callBacks.get(url); - if (iDownload != null) { - iDownload.onError(url, msg); - } - } - - @Override - public void onConnected(NetworkUtils.NetworkType networkType) { - //网络连接已连接 - for (DownloadTask downloadTask : downloadTasks) { - downloadTask.startDownload();//继续所有下载任务 - String url = downloadTask.getFileBean().getUrl(); - int length = downloadTask.getFileBean().getLength(); - Log.d(DOWN_LOAD_TAG, "网络恢复继续下载"); - - IDownload iDownload = callBacks.get(url); - if (iDownload != null) { - iDownload.onProgress(url, length); - } - } - } - - @Override - public void onDisconnected() { - //网络连接已断开 - for (DownloadTask downloadTask : downloadTasks) { - downloadTask.pauseDownload();//暂停所有下载任务 - //发送下载进度回调 - String url = downloadTask.getFileBean().getUrl(); - Log.d(DOWN_LOAD_TAG, "网络断开暂停下载"); - - IDownload iDownload = callBacks.get(url); - if (iDownload != null) { - iDownload.onPause(url, null); - } - } - } - -} diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/DownloadTask.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/DownloadTask.java deleted file mode 100644 index 70a8cc23ed..0000000000 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/DownloadTask.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.mogo.eagle.core.utilcode.breakpoint.thread; - -import static com.mogo.eagle.core.utilcode.breakpoint.Config.DOWN_LOAD_TAG; - -import android.content.Context; -import android.util.Log; - -import com.mogo.eagle.core.utilcode.breakpoint.bean.FileBean; -import com.mogo.eagle.core.utilcode.breakpoint.bean.ThreadBean; -import com.mogo.eagle.core.utilcode.breakpoint.callback.DownloadCallBack; -import com.mogo.eagle.core.utilcode.breakpoint.db.dao.ThreadDao; -import com.mogo.eagle.core.utilcode.breakpoint.db.impl.ThreadDaoImpl; -import com.mogo.eagle.core.utilcode.breakpoint.event.DownloadData; -import com.mogo.eagle.core.utilcode.breakpoint.services.DownloadService; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; - -import java.util.ArrayList; -import java.util.List; - -/** - * 下载任务 - */ -public class DownloadTask implements DownloadCallBack { - - private final FileBean fileBean; - private final int downloadThreadCount; - private final ThreadDao dao; - private final DownloadCallBack downloadCallBack; - - /** - * 总下载完成进度 - */ - private int finishedProgress = 0; - /** - * 下载线程信息集合 - */ - private List threads; - /** - * 下载线程集合 - */ - private final List downloadThreads = new ArrayList<>(); - - public DownloadTask(Context context, FileBean fileBean, int downloadThreadCount, DownloadCallBack downloadCallBack) { - this.fileBean = fileBean; - this.downloadThreadCount = downloadThreadCount; - this.downloadCallBack = downloadCallBack; - dao = new ThreadDaoImpl(context); - //初始化下载线程 - initDownThreads(); - } - - private void initDownThreads() { - //查询数据库中的下载线程信息 - threads = dao.getThreads(fileBean.getUrl()); - if (threads.size() == 0) {//如果列表没有数据 则为第一次下载 - Log.d(DOWN_LOAD_TAG, "第一次下载"); - //根据下载的线程总数平分各自下载的文件长度 - int length = fileBean.getLength() / downloadThreadCount; - for (int i = 0; i < downloadThreadCount; i++) { - ThreadBean thread = new ThreadBean(i, fileBean.getUrl(), i * length, - (i + 1) * length - 1, 0); - if (i == downloadThreadCount - 1) { - thread.setEnd(fileBean.getLength()); - } - //将下载线程保存到数据库 - dao.insertThread(thread); - threads.add(thread); - } - } - //创建下载线程开始下载 - for (ThreadBean thread : threads) { - finishedProgress += thread.getFinished(); - DownloadThread downloadThread = new DownloadThread(fileBean, thread, this); - DownloadService.executorService.execute(downloadThread); - downloadThreads.add(downloadThread); - } - UiThreadHandler.post(() -> downloadCallBack.startDownload(fileBean.getUrl())); - Log.d(DOWN_LOAD_TAG, " 开始下载:" + finishedProgress); - } - - /** - * 开始下载 - */ - public void startDownload() { - finishedProgress = 0; - threads.clear(); - downloadThreads.clear(); - initDownThreads(); - } - - /** - * 暂停下载 - */ - public void pauseDownload() { - for (DownloadThread downloadThread : downloadThreads) { - if (downloadThread != null) { - downloadThread.setPause(true); - } - } - } - - @Override - public void startDownload(String url) { - UiThreadHandler.post(() -> downloadCallBack.startDownload(url)); - } - - @Override - public void pauseCallBack(String url, ThreadBean threadBean) { - //保存下载进度到数据库 - Log.d(DOWN_LOAD_TAG, "保存数据:" + threadBean.toString()); - dao.updateThread(threadBean.getUrl(), threadBean.getId(), threadBean.getFinished()); - UiThreadHandler.post(() -> downloadCallBack.pauseCallBack(url,threadBean)); - } - - private long curTime = 0; - - @Override - public void progressCallBack(String url, int length) { - finishedProgress += length; - //每500毫秒发送刷新进度事件 - if (System.currentTimeMillis() - curTime > 500 || finishedProgress == fileBean.getLength()) { - int progress = (int) (finishedProgress * 1.0 / fileBean.getLength() * 100); - fileBean.setFinished(finishedProgress); - DownloadData downloadData = new DownloadData(); - downloadData.setUrl(fileBean.getUrl()); - downloadData.setProgress(progress); - downloadData.setLength(fileBean.getLength()); - downloadData.setMsg("下载进度回调"); - UiThreadHandler.post(() -> downloadCallBack.progressCallBack(url,progress)); - curTime = System.currentTimeMillis(); - } - } - - @Override - public synchronized void threadDownLoadFinished(String url, ThreadBean threadBean, String localPath) { - for (ThreadBean bean : threads) { - if (bean.getId() == threadBean.getId()) { - //从列表中将已下载完成的线程信息移除 - threads.remove(bean); - break; - } - } - if (threads.size() == 0) {//如果列表size为0 则所有线程已下载完成 - Log.d(DOWN_LOAD_TAG, " DownloadTask threadDownLoadFinished 下载完成----->"); - //删除数据库中的信息 - dao.deleteThread(fileBean.getUrl()); - //发送下载完成事件 - DownloadData downloadData = new DownloadData(); - downloadData.setUrl(fileBean.getUrl()); - downloadData.setMsg("下载完成"); - downloadData.setFilePath(fileBean.getSavePath() + fileBean.getFileName()); - UiThreadHandler.post(() -> downloadCallBack.threadDownLoadFinished(url,threadBean, localPath)); - } - } - - @Override - public void errorCallBack(String url, String msg) { - UiThreadHandler.post(() -> downloadCallBack.errorCallBack(url, msg)); - } - - public FileBean getFileBean() { - return fileBean; - } - -} diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/DownloadThread.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/DownloadThread.java deleted file mode 100644 index fab591c394..0000000000 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/DownloadThread.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.mogo.eagle.core.utilcode.breakpoint.thread; - - -import static com.mogo.eagle.core.utilcode.breakpoint.Config.DOWN_LOAD_TAG; - -import android.util.Log; - -import com.mogo.eagle.core.utilcode.breakpoint.bean.FileBean; -import com.mogo.eagle.core.utilcode.breakpoint.bean.ThreadBean; -import com.mogo.eagle.core.utilcode.breakpoint.callback.DownloadCallBack; -import com.mogo.eagle.core.utilcode.breakpoint.event.DownloadData; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; - -import java.io.File; -import java.io.InputStream; -import java.io.RandomAccessFile; -import java.net.HttpURLConnection; -import java.net.URL; - -/** - * 下载线程 - */ -public class DownloadThread extends Thread { - - private final FileBean fileBean; - private final ThreadBean threadBean; - private final DownloadCallBack callback; - private Boolean isPause = false; - - public DownloadThread(FileBean fileBean, ThreadBean threadBean, DownloadCallBack callback) { - this.fileBean = fileBean; - this.threadBean = threadBean; - this.callback = callback; - } - - public void setPause(Boolean pause) { - isPause = pause; - } - - @Override - public void run() { - HttpURLConnection connection = null; - RandomAccessFile raf = null; - InputStream inputStream = null; - try { - URL url = new URL(threadBean.getUrl()); - connection = (HttpURLConnection) url.openConnection(); - connection.setConnectTimeout(10000); - connection.setRequestMethod("GET"); - //设置下载起始位置 - int start = threadBean.getStart() + threadBean.getFinished(); - connection.setRequestProperty("Range","bytes="+start+"-"+threadBean.getEnd()); - //设置写入位置 - File file = new File(fileBean.getSavePath(),fileBean.getFileName()); - raf = new RandomAccessFile(file,"rwd"); - raf.seek(start); - //开始下载 - Log.d(DOWN_LOAD_TAG, "DownloadThread connection.getResponseCode() = " + connection.getResponseCode() + "---threadBean.getUrl() =" + threadBean.getUrl()); - if(connection.getResponseCode() == HttpURLConnection.HTTP_PARTIAL){ - inputStream = connection.getInputStream(); - byte[] bytes = new byte[1024]; - int len = -1; - while ((len = inputStream.read(bytes))!=-1){ - raf.write(bytes,0,len); - //将加载的进度回调出去 - callback.progressCallBack(fileBean.getUrl(), len); - //保存进度 - threadBean.setFinished(threadBean.getFinished()+len); - //在下载暂停的时候将下载进度保存到数据库 - if(isPause){ - UiThreadHandler.post(() -> callback.pauseCallBack(this.fileBean.getUrl(),threadBean)); - return; - } - } - //下载完成 - UiThreadHandler.post(() -> callback.threadDownLoadFinished(this.fileBean.getUrl(),threadBean, file.getAbsolutePath())); - } - - } catch (Exception e) { - e.printStackTrace(); - Log.e(DOWN_LOAD_TAG, "error: " + e.getMessage()); - DownloadData downloadData = new DownloadData(); - downloadData.setUrl(fileBean.getUrl()); - downloadData.setMsg(e.getMessage()); - UiThreadHandler.post(() -> callback.errorCallBack(this.fileBean.getUrl(), e.getMessage())); - -// EventMessage eventMessage = new EventMessage(EventMessage.TYPE_ERROR,downloadData); -// EventBus.getDefault().post(eventMessage); - } finally { - try { - inputStream.close(); - raf.close(); - connection.disconnect(); - }catch (Exception e){ - e.printStackTrace(); - Log.e(DOWN_LOAD_TAG, "error2: " + e.getMessage()); - DownloadData downloadData = new DownloadData(); - downloadData.setUrl(fileBean.getUrl()); - downloadData.setMsg(e.getMessage()); -// EventMessage eventMessage = new EventMessage(EventMessage.TYPE_ERROR,downloadData); -// EventBus.getDefault().post(eventMessage); - } - } - } -} diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/InitThread.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/InitThread.java deleted file mode 100644 index e58c4f599e..0000000000 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/InitThread.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.mogo.eagle.core.utilcode.breakpoint.thread; - -import static com.mogo.eagle.core.utilcode.breakpoint.Config.DOWN_LOAD_TAG; - -import android.util.Log; - -import com.mogo.eagle.core.utilcode.breakpoint.bean.FileBean; -import com.mogo.eagle.core.utilcode.breakpoint.event.DownloadData; - -import java.io.File; -import java.io.RandomAccessFile; -import java.net.HttpURLConnection; -import java.net.URL; - -/** - * 初始化线程 - */ -public class InitThread extends Thread { - - private final FileBean fileBean; - private final InitCallBack initCallBack; - - public InitThread(FileBean fileBean, InitCallBack initCallBack) { - this.fileBean = fileBean; - this.initCallBack = initCallBack; - } - - public interface InitCallBack { - - void initSuccess(FileBean fileBean); - - void initFailed(DownloadData downloadData); - } - - @Override - public void run() { - HttpURLConnection connection; - RandomAccessFile randomAccessFile; - try { - URL url = new URL(fileBean.getUrl()); - connection = (HttpURLConnection) url.openConnection(); - connection.setConnectTimeout(10000); - connection.setRequestMethod("GET"); - int fileLength = -1; - if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { - fileLength = connection.getContentLength(); - } - Log.d(DOWN_LOAD_TAG, "InitThread fileLength = " + fileLength + "---connection.getResponseCode() = " + connection.getResponseCode()); - if (fileLength <= 0) return; - File dir = new File(fileBean.getSavePath()); - if (!dir.exists()) { - dir.mkdir(); - } - File file = new File(dir, fileBean.getFileName()); - randomAccessFile = new RandomAccessFile(file, "rwd"); - randomAccessFile.setLength(fileLength); - fileBean.setLength(fileLength); - this.initCallBack.initSuccess(fileBean); - } catch (Exception e) { - Log.e(DOWN_LOAD_TAG, "InitThread e = " + e); - DownloadData downloadData = new DownloadData(); - downloadData.setUrl(fileBean.getUrl()); - downloadData.setMsg(e.getMessage()); - this.initCallBack.initFailed(downloadData); - e.printStackTrace(); - } - } -} diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/utils/DownloadUtils.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/utils/DownloadUtils.java deleted file mode 100644 index 59ff2b83e5..0000000000 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/utils/DownloadUtils.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.mogo.eagle.core.utilcode.breakpoint.utils; - -import android.content.Context; -import android.content.Intent; -import android.util.Log; - -import com.mogo.eagle.core.utilcode.breakpoint.bean.FileBean; -import com.mogo.eagle.core.utilcode.breakpoint.callback.IDownload; -import com.mogo.eagle.core.utilcode.breakpoint.services.DownloadService; - - -public class DownloadUtils { - - public static void downLoad(Context context, String url, String savePath, String fileName, int downloadThreadCount, IDownload iDownload) { - FileBean fileBean = new FileBean(0, savePath, fileName, url, 0); - fileBean.setThreadCount(downloadThreadCount); - Intent startIntent = new Intent(context, DownloadService.class); - startIntent.setAction(DownloadService.ACTION_START); - startIntent.putExtra("FileBean", fileBean); - DownloadService.getInstance(context).onStartCommand(startIntent, iDownload); - } - - public static void pauseDownLoad(Context context, String url, IDownload iDownload) { - FileBean fileBean = new FileBean(0, null, null, url, 0); - Intent pauseIntent = new Intent(context, DownloadService.class); - pauseIntent.setAction(DownloadService.ACTION_PAUSE); - pauseIntent.putExtra("FileBean", fileBean); - DownloadService.getInstance(context).onStartCommand(pauseIntent, iDownload); - } -} diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/Config.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/Config.java similarity index 93% rename from core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/Config.java rename to core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/Config.java index c853d81f92..5836f6f142 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/Config.java +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/Config.java @@ -1,4 +1,4 @@ -package com.mogo.eagle.core.utilcode.breakpoint; +package com.mogo.eagle.core.utilcode.download; import android.os.Environment; diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/DownloadUtils.kt b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/DownloadUtils.kt new file mode 100644 index 0000000000..b5a8e8f1a7 --- /dev/null +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/DownloadUtils.kt @@ -0,0 +1,59 @@ +package com.mogo.eagle.core.utilcode.download + +import android.content.* +import com.mogo.core.download.* +import com.mogo.eagle.core.utilcode.download.callback.* +import com.mogo.eagle.core.utilcode.util.BuildConfig +import com.mogo.eagle.core.utilcode.util.NetworkUtils +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.eagle.core.utilcode.util.Utils +import kotlinx.coroutines.* +import kotlinx.coroutines.flow.* +import java.io.* + +object DownloadUtils { + + + private val poller = object : INetStatePoller { + + override fun interval(): Long { + return 5000 + } + + override fun isNetConnected(): Boolean { + return NetworkUtils.isConnected() + } + } + + private val scope by lazy { CoroutineScope(ThreadUtils.getIoPool().asCoroutineDispatcher() + SupervisorJob()) } + + fun downLoad(ctx: Context?, url: String, savePath: String, fileName: String, listener: IDownloadListener?) { // FileBean fileBean = new FileBean(0, savePath, fileName, url, 0); + val context = ctx ?: Utils.getApp() ?: throw AssertionError("context must not be null.") + if (!Downloader.hasInit()) { + Downloader.init(context) + Downloader.setLoggable(BuildConfig.DEBUG) + } + Downloader.setNetStatePoller(poller) + Downloader.download(url, File(savePath, fileName)) + .onEach { + when(it) { + is DownloadStart -> + UiThreadHandler.post { listener?.onStart(url) } + is Downloading -> { + UiThreadHandler.post { listener?.onProgress(url, it.downloaded, it.total) } + } + is DownloadSuccess -> { + UiThreadHandler.post { listener?.onFinished(url, it.path)} + } + is DownloadFailed -> { + UiThreadHandler.post { listener?.onError(url, it.msg) } + } + } + } + .filter { + it.isComplete() + } + .launchIn(scope) + } +} \ No newline at end of file diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/callback/IDownloadListener.kt b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/callback/IDownloadListener.kt new file mode 100644 index 0000000000..7094dd6b07 --- /dev/null +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/callback/IDownloadListener.kt @@ -0,0 +1,30 @@ +package com.mogo.eagle.core.utilcode.download.callback + +interface IDownloadListener { + /** + * 开始下载 + */ + fun onStart(url: String) + + /** + * 下载进度 + * + * @param url 下载链接 + * @param downloaded 已下载进度 + * @param total 文件总大小 + */ + fun onProgress(url: String, downloaded: Long, total: Long) + + /** + * 线程下载完毕 + * + * @param path 下载完成后的本地存储路径 + */ + fun onFinished(url: String, path: String) + + /** + * 错误信息回调 + * @param error 下载失败后的错误消息 + */ + fun onError(url: String, error: String?) +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 53966908cc..82111f010f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -146,10 +146,7 @@ ADAS_DATA_LIB_CHILD_VERSION=.4 # 是否支持patch升级 PATCH_UPGRADE_SUPPORT=true -MOGO_PLUGIN_VERSION=1.0.0.31 -# 线程优化版本 -THREAD_OPT_VERSION=4.0.1 # matrix版本 MATRIX_VERSION=2.0.8