uni-app plus.downloader.enumerate 报Bug

uni-app plus.downloader.enumerate 报Bug

16 回复

bug 已确认。 确认下载任务应该持久化管理。

更多关于uni-app plus.downloader.enumerate 报Bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html


下个版本能恢复吗?着急用。

回复 q***@163.com: 我们尽快。 有进展会在这里同步你

回复 q***@163.com: 在内测环境修复了。你留个qq. 我打个内测包给你试试

回复 DCloud_Android_DQQ: 1446145513

应该不是5+plus的问题,还是hubilder更新的问题。

两个问题: 1 帮忙提供一个可以说明问题的可执行代码页面 2 其实这种下载任务,重启后应该清除掉是不是更合理

从读取数据方便性角度下,清理掉当然不合理啊,如果想找下载完成的历史数据做文件读取/删除等操作是不是更方便. 从应用缓存大小角度下,自动清理可能合理.就是不知道自定义储存和plus.downloader的缓存哪一个更占空间

1:这个已经确定不是代码的问题,代码块就一调用plus.downloader.enumerate(() => {},4) 2:我认为您说的是可行的,但是要重新优化下enumerate方法,既然已经下载完成就直接清除掉记录,如果是重启后清除,对于我们自己来处理历史数据是非常复杂的。 对于我个人来说我认为还是不清除掉更加方便,因为所有数据统一在一个接口中获取到了,就不需要来处理其他的逻辑,因为我这边是做的视频下载列表的功能,所以这个接口对我来说挺重要的。

回复 q***@163.com: 明白。 那还是帮忙提供一个 可以复现问题的示例吧。 提供后 我这边看看

回复 DCloud_Android_DQQ: 代码已经放到下面了,直接复制就可以。麻烦您了

<style lang="scss"> </style> <template> <view> <button type="default" @click="_add">添加一个下载任务</button> <button type="default" @click="_getSuccessList">获取下载成功的枚举列表</button> <text>点击添加下载等待下载成功后,点击获取下载成功的列表,此时会得到下载成功的长度,然后关闭App再次打开点击获取下载成功的列表,此时获取的是0(预期是重新打开不会清除下载成功的记录)</text> </view> </template> <script> export default { data() { return { }; }, methods: { _add(){ this.downLoadTask = plus.downloader.createDownload("http://39.101.171.94:8899/videos/clip/41010500001320000013/2022-01-05/20220105115939.mp4", { filename: `_downloads/ballvideo/测试.mp4`, //下载的位置 timeout: 0, name: "别名", //别名 }, (download, status) => { if (status == 200) { uni.showToast({ title:'下载成功' }) } }); this.downLoadTask.start() uni.showToast({ title: "已添加至下载列表", icon: "none" }) }, _getSuccessList(){ plus.downloader.enumerate(downListSus => { //获取已经下载成功了的列表 uni.showToast({ title:`获取到${downListSus.length}个下载成功的任务`, icon:"none" }) }, 4); }, } } </script>

好 我试试

HX3.3.7+已修复该问题

plus.downloader.enumerate 是 UniApp 中用于枚举已创建下载任务的方法。常见报错原因及解决方案如下:

1. 权限问题

  • 确保已配置下载权限:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  • 动态权限申请(Android 6.0+)需在调用前处理

2. 调用时机不当

  • 需在 plusready 事件后调用:
    document.addEventListener('plusready', () => {
      plus.downloader.enumerate((tasks) => {
        console.log(tasks)
      })
    })
    

3. 参数格式错误

  • 正确调用格式:
    // 枚举全部任务
    plus.downloader.enumerate((tasks) => {})
    
    // 枚举指定状态任务(0:未开始,1:下载中,2:暂停,3:已完成,4:失败)
    plus.downloader.enumerate((tasks) => {}, { state: 3 })
    

4. 平台差异

  • iOS 需注意:下载任务仅限应用生命周期内,应用重启后无法枚举历史任务
  • Android 可枚举持久化存储的任务

5. 常见错误处理

try {
  plus.downloader.enumerate((tasks) => {
    if(!tasks) {
      console.log('无下载任务')
      return
    }
    tasks.forEach(task => {
      console.log(task.url, task.state)
    })
  })
} catch(e) {
  console.error('枚举失败:', e.message)
}
回到顶部