kotlin Android下载管理器延迟并且总是不成功

wlsrxk51  于 2023-11-21  发布在  Kotlin
关注(0)|答案(1)|浏览(194)

所以,我试图为我的应用程序实现一个下载PDF功能。下面是我启动下载管理器的代码。

  1. val document = documents[i]
  2. val request = DownloadManager.Request(Uri.parse("https://repository.bsi.ac.id/repo/files/256149/download/File_8-Bab-I-Pengenalan-Android.pdf"))
  3. .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI)
  4. .setTitle("Downloading Pdf-Android")
  5. .setMimeType("application/pdf")
  6. .setDescription("File Description")
  7. .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
  8. .setDestinationInExternalPublicDir(
  9. Environment.DIRECTORY_DOWNLOADS,
  10. "Pdf-Android.pdf"
  11. )
  12. val filter = IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)
  13. applicationContext.registerReceiver(DownloadReceiver(), filter)
  14. downloadManager.enqueue(request)

字符串
经过相当长的一段时间,下载启动,但立即失败,我不能真正调试它,因为logcat不显示任何东西.我已经尝试将允许的网络类型设置为celluar,给予写入外部文件的权限.
我试着使用答案中的方法,但由于某种原因,我在logcat中没有得到任何信息。但下载仍然不成功,logcat上没有找到任何日志
我已经在manifset上注册了广播接收器,就像这样

  1. <receiver
  2. android:name="somename.DownloadReceiver"
  3. android:enabled="true"
  4. android:exported="false">
  5. <intent-filter>
  6. <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
  7. </intent-filter>
  8. </receiver>

92vpleto

92vpleto1#

这是一个有点不方便的情况;然而,由于这段代码,我们遇到了DownloadManager.STATUS_PAUSED错误(原因日志是 * 下载失败:1*).我发现了相关信息从这个链接:DownloadManager.尽管遇到了这个错误,有关它的文档也是相当不足.我只是添加了这样一个方法来检测问题的原因.

  1. val downloadId = downloadManager.enqueue(request)
  2. lifecycleScope.launch {
  3. while (true) {
  4. checkDownloadStatus(applicationContext, downloadId)
  5. delay(10000)
  6. }
  7. }
  8. private fun checkDownloadStatus(context: Context?, downloadId: Long) {
  9. val downloadManager = context?.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
  10. val query = DownloadManager.Query().setFilterById(downloadId)
  11. val cursor = downloadManager.query(query)
  12. if (cursor.moveToFirst()) {
  13. Log.i("DownloadManager", "cursorStarted")
  14. try {
  15. val columnStatusIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)
  16. val columnReasonIndex = cursor.getColumnIndex(DownloadManager.COLUMN_REASON)
  17. val status = cursor.getInt(columnStatusIndex)
  18. Log.i("DownloadManagerStatus", "$status")
  19. when (status) {
  20. DownloadManager.STATUS_SUCCESSFUL -> {
  21. Log.i("DownloadManagerSuccess", "Download successful")
  22. }
  23. DownloadManager.STATUS_FAILED -> {
  24. val reason = cursor.getInt(columnReasonIndex)
  25. Log.e("DownloadManagerFailed", "Download failed: $reason")
  26. }
  27. DownloadManager.STATUS_PAUSED -> {
  28. val reason = cursor.getInt(columnReasonIndex)
  29. Log.e("DownloadManagerPaused", "Download paused: $reason")
  30. }
  31. else -> {
  32. val reason = cursor.getInt(columnReasonIndex)
  33. Log.e("DownloadManagerUnknown", "unknown : $reason")
  34. }
  35. }
  36. } catch (e: Exception) {
  37. e.printStackTrace()
  38. }
  39. }
  40. cursor.close()
  41. }

字符串

展开查看全部

相关问题