尝试像这样使用DownloadManager
DownloadManager.Request request = new DownloadManager.Request(uri)
.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE)
.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI)
.setAllowedOverRoaming(true)
.setDestinationInExternalFilesDir(this, null,String.valueOf(mPathAndFolder))
.setVisibleInDownloadsUi(false)
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN);
long downloadID = downloadManager.enqueue(request);
在Android Manifest
中增加了以下权限<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
运行时出现以下错误
java.lang.NoSuchMethodError:美元android.app.DownloadManager Request.setNotificationVisibility
为什么出现这个错误?如何使下载管理器工作?
我需要使用两个单独的DownloadManager吗?请求一个API 9和另一个API 11?
没有,但是你确实需要使用Java保护块:
DownloadManager.Request request = new DownloadManager.Request(uri)
.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE)
.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI)
.setAllowedOverRoaming(true)
.setDestinationInExternalFilesDir(this, null,String.valueOf(mPathAndFolder))
.setVisibleInDownloadsUi(false);
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) {
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN);
}
并且,您将不得不接受您的下载将在API级别9和10的设备上可见的事实。
当您使用在该设备的API中不可用的方法时,会发生NoSuchMethodError。您可以通过在运行最新版本Android的模拟器上运行代码来测试是否存在这种情况。您仍然可以保留更新的方法(您可能应该这样做),但是将其放在try语句中。如果你得到一个NoSuchMethodError,那么你的代码正在一个较旧的设备上运行,你需要让你的catch语句使用一个工作。