diff --git a/ohos/src/main/ets/components/FlutterDownloaderPlugin.ets b/ohos/src/main/ets/components/FlutterDownloaderPlugin.ets index 19f0c706da49363ae72a317ca0c550e2c8f521d1..9f0382b5ae293614879f170265e7e2b7f68d177e 100644 --- a/ohos/src/main/ets/components/FlutterDownloaderPlugin.ets +++ b/ohos/src/main/ets/components/FlutterDownloaderPlugin.ets @@ -430,6 +430,7 @@ export class FlutterDownloaderPlugin implements FlutterPlugin, MethodCallHandler private callback(taskId: string, filename: string, status: DownloadStatus, progress: request.agent.Progress, isResume?: number): void { const task = this.taskDao!.loadTask(taskId); + const syncTask = this.taskDao!.getSyncData(taskId); if (task != null) { let lastProgress = 0; if (status == DownloadStatus.COMPLETE) { @@ -438,7 +439,11 @@ export class FlutterDownloaderPlugin implements FlutterPlugin, MethodCallHandler lastProgress = -1; } else { lastProgress = Math.trunc(progress.processed * 100 / progress.sizes[0]); - + // 状态是异步获取的,不存在由PAUSED状态直接变为RUNNING状态的情况,只能是PAUSED-->Resume-->RUNNING + const isErrorRunning = status === DownloadStatus.RUNNING && syncTask && syncTask[TaskEntry.COLUMN_NAME_STATUS] === DownloadStatus.PAUSED && isResume !== 0 + if (isErrorRunning) { + status = DownloadStatus.PAUSED; + } const args: Map = new Map(); args["task_id"] = taskId args["status"] = status diff --git a/ohos/src/main/ets/components/TaskDao.ets b/ohos/src/main/ets/components/TaskDao.ets index 3696d6c2bc6b7c1b03a4ed30c18cceef894374e5..839caf61e356a53e33d36a96f5f849d1bf410cee 100644 --- a/ohos/src/main/ets/components/TaskDao.ets +++ b/ohos/src/main/ets/components/TaskDao.ets @@ -42,6 +42,7 @@ export class TaskDao { TaskEntry.COLUMN_NAME_TIME_CREATED, TaskEntry.COLUMN_ALLOW_CELLULAR, ]; + private syncData: Map = new Map(); constructor(dbHelper: TaskDbHelper) { this.dbHelper = dbHelper; // 将 dbHelper 作为实例变量保存 @@ -134,6 +135,10 @@ export class TaskDao { return result; } + getSyncData(taskId: string) { + return this.syncData.get(taskId); + } + loadTask(taskId: string): DownloadTask | null { let db = this.dbHelper!.getRdbStore(); let result: DownloadTask | null = null; @@ -158,6 +163,7 @@ export class TaskDao { } async updateTask(taskId: string, values: ValuesBucket): Promise { + this.syncData.set(taskId, values); let db = this.dbHelper!.getRdbStore(); if (db == null) { return; @@ -178,6 +184,7 @@ export class TaskDao { } async deleteTask(taskId: string): Promise { + this.syncData.delete(taskId); let db = this.dbHelper!.getRdbStore(); if (db == null) { return;