【发布时间】:2021-05-09 01:00:04
【问题描述】:
DownloadManager throw android.os.NetworkOnMainThreadException 仅适用于三星设备 (Android 10)。
val request = DownloadManager.Request(Uri.parse(url))
val fileName = parseFileName(url)
request.addRequestHeader("Cookie", CookieManager.getInstance().getCookie(url))
request.allowScanningByMediaScanner()
request.setNotificationVisibility(
DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED
)
request.setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS,
fileName
)
val dm = activity.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager?
dm?.enqueue(request)
堆栈跟踪:
Fatal Exception: android.os.NetworkOnMainThreadException
at android.os.Parcel.createException(Parcel.java:2098)
at android.os.Parcel.readException(Parcel.java:2056)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
at android.content.ContentProviderProxy.insert(ContentProviderProxy.java:481)
at android.content.ContentResolver.insert(ContentResolver.java:1835)
at android.app.DownloadManager.enqueue(DownloadManager.java:1544)
dm?.enqueue(request) 抛出 android.os.NetworkOnMainThreadException。虽然可以在主线程中调用。
我该如何解决这个问题?
【问题讨论】:
-
在后台线程中运行任何与下载相关的东西。
-
我们可以在主线程中运行 DownloadManager.eneque()。
-
它适用于其他设备。
-
@RageTF 这些设备的 SDK 级别是多少?
Android 5 (Lolipop) -> SDK 22, Android 6 (Marshmallow) -> SDK 23, ..。顺便说一句,您应该使用@<username>来注释用户,以便用户得到通知。 -
@Darkman 谢谢。 Android 10 -> SDK 29
标签: android android-service samsung-mobile samsung-galaxy