所以,我正在尝试为我的应用程序实现下载 pdf 功能。这是我启动下载管理器的代码。
val document = documents[i]
val request = DownloadManager.Request(Uri.parse("https://repository.bsi.ac.id/repo/files/256149/download/File_8-Bab-I-Pengenalan-Android.pdf"))
.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI)
.setTitle("Downloading Pdf-Android")
.setMimeType("application/pdf")
.setDescription("File Description")
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
.setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS,
"Pdf-Android.pdf"
)
downloadManager.enqueue(request)
经过相当长的一段时间后,下载启动但立即失败,并且我无法真正调试它,因为 logcat 没有显示任何内容。我尝试将允许的网络类型设置为celluar,并授予写入外部文件的权限。
您可以通过这种方式手动调试。我相信您可能遇到某种不受信任的证书问题。
val downloadId = downloadManager.enqueue(request)
Log.i("DownloadManager", "started")
val query = DownloadManager.Query().setFilterById(downloadId)
val cursor = downloadManager.query(query)
if (cursor.moveToFirst()) {
try {
val columnStatusIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)
val columnReasonIndex = cursor.getColumnIndex(DownloadManager.COLUMN_REASON)
val status = cursor.getInt(columnStatusIndex)
if (status == DownloadManager.STATUS_SUCCESSFUL) {
Log.i("DownloadManager", "Download successful")
} else if (status == DownloadManager.STATUS_FAILED) {
val reason = cursor.getInt(columnReasonIndex)
Log.e("DownloadManager", "Download failed: $reason")
}
} catch (e: Exception) {
e.printStackTrace()
}
}