• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Class (WebDownloadManager)
2<!--Kit: ArkWeb-->
3<!--Subsystem: Web-->
4<!--Owner: @aohui-->
5<!--Designer: @yaomingliu-->
6<!--Tester: @ghiker-->
7<!--Adviser: @HelloCrease-->
8
9可以通过该类提供的接口来恢复失败的下载任务。
10
11> **说明:**
12>
13> - 本模块首批接口从API version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
14>
15> - 本Class首批接口从API version 11开始支持。
16>
17> - 示例效果请以真机运行为准,当前DevEco Studio预览器不支持。
18
19## 导入模块
20
21```ts
22import { webview } from '@kit.ArkWeb';
23```
24
25## setDownloadDelegate<sup>11+</sup>
26
27static setDownloadDelegate(delegate: WebDownloadDelegate): void
28
29设置用于接收从WebDownloadManager触发的下载进度的委托。
30
31**系统能力:** SystemCapability.Web.Webview.Core
32
33**参数:**
34
35| 参数名          | 类型    |  必填  | 说明                                            |
36| ---------------| ------- | ---- | ------------- |
37| delegate      | [WebDownloadDelegate](./arkts-apis-webview-WebDownloadDelegate.md)  | 是   | 用来接收下载进回调的委托。 |
38
39**示例:**
40
41```ts
42// xxx.ets
43import { webview } from '@kit.ArkWeb';
44import { BusinessError } from '@kit.BasicServicesKit';
45
46@Entry
47@Component
48struct WebComponent {
49  controller: webview.WebviewController = new webview.WebviewController();
50  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
51  download: webview.WebDownloadItem = new webview.WebDownloadItem();
52  failedData: Uint8Array = new Uint8Array();
53
54  build() {
55    Column() {
56      Button('setDownloadDelegate')
57        .onClick(() => {
58          try {
59            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
60              console.info("will start a download.");
61              // 传入一个下载路径,并开始下载。
62              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
63            })
64            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
65              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
66              this.download = webDownloadItem;
67            })
68            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
69              console.info("download failed guid: " + webDownloadItem.getGuid());
70              // 序列化失败的下载到一个字节数组。
71              this.failedData = webDownloadItem.serialize();
72            })
73            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
74              console.info("download finish guid: " + webDownloadItem.getGuid());
75            })
76            this.controller.setDownloadDelegate(this.delegate);
77            webview.WebDownloadManager.setDownloadDelegate(this.delegate);
78          } catch (error) {
79            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
80          }
81        })
82      Button('startDownload')
83        .onClick(() => {
84          try {
85            this.controller.startDownload('https://www.example.com');
86          } catch (error) {
87            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
88          }
89        })
90      Button('resumeDownload')
91        .onClick(() => {
92          try {
93            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
94          } catch (error) {
95            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
96          }
97        })
98      Button('cancel')
99        .onClick(() => {
100          try {
101            this.download.cancel();
102          } catch (error) {
103            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
104          }
105        })
106      Button('pause')
107        .onClick(() => {
108          try {
109            this.download.pause();
110          } catch (error) {
111            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
112          }
113        })
114      Button('resume')
115        .onClick(() => {
116          try {
117            this.download.resume();
118          } catch (error) {
119            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
120          }
121        })
122      Web({ src: 'www.example.com', controller: this.controller })
123    }
124  }
125}
126```
127
128## resumeDownload<sup>11+</sup>
129
130static resumeDownload(webDownloadItem: WebDownloadItem): void
131
132恢复一个失败的下载任务。
133
134**系统能力:** SystemCapability.Web.Webview.Core
135
136**参数:**
137
138| 参数名          | 类型    |  必填  | 说明                                            |
139| ---------------| ------- | ---- | ------------- |
140| webDownloadItem      | [WebDownloadItem](./arkts-apis-webview-WebDownloadItem.md)  | 是   | 待恢复的下载任务。 |
141
142**错误码:**
143
144以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。
145
146| 错误码ID | 错误信息                              |
147| -------- | ------------------------------------- |
148| 17100018 | No WebDownloadDelegate has been set yet. |
149
150**示例:**
151
152```ts
153// xxx.ets
154import { webview } from '@kit.ArkWeb';
155import { BusinessError } from '@kit.BasicServicesKit';
156
157@Entry
158@Component
159struct WebComponent {
160  controller: webview.WebviewController = new webview.WebviewController();
161  delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
162  download: webview.WebDownloadItem = new webview.WebDownloadItem();
163  failedData: Uint8Array = new Uint8Array();
164
165  build() {
166    Column() {
167      Button('setDownloadDelegate')
168        .onClick(() => {
169          try {
170            this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
171              console.info("will start a download.");
172              // 传入一个下载路径,并开始下载。
173              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
174            })
175            this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
176              console.info("download update percent complete: " + webDownloadItem.getPercentComplete());
177              this.download = webDownloadItem;
178            })
179            this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
180              console.info("download failed guid: " + webDownloadItem.getGuid());
181              // 序列化失败的下载到一个字节数组。
182              this.failedData = webDownloadItem.serialize();
183            })
184            this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
185              console.info("download finish guid: " + webDownloadItem.getGuid());
186            })
187            this.controller.setDownloadDelegate(this.delegate);
188            webview.WebDownloadManager.setDownloadDelegate(this.delegate);
189          } catch (error) {
190            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
191          }
192        })
193      Button('startDownload')
194        .onClick(() => {
195          try {
196            this.controller.startDownload('https://www.example.com');
197          } catch (error) {
198            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
199          }
200        })
201      Button('resumeDownload')
202        .onClick(() => {
203          try {
204            webview.WebDownloadManager.resumeDownload(webview.WebDownloadItem.deserialize(this.failedData));
205          } catch (error) {
206            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
207          }
208        })
209      Button('cancel')
210        .onClick(() => {
211          try {
212            this.download.cancel();
213          } catch (error) {
214            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
215          }
216        })
217      Button('pause')
218        .onClick(() => {
219          try {
220            this.download.pause();
221          } catch (error) {
222            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
223          }
224        })
225      Button('resume')
226        .onClick(() => {
227          try {
228            this.download.resume();
229          } catch (error) {
230            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
231          }
232        })
233      Web({ src: 'www.example.com', controller: this.controller })
234    }
235  }
236}
237```