1

尝试像这样使用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

为什么会出现这个错误?如何使下载管理器工作?

4

2 回答 2

3

我是否需要使用两个单独的 DownloadManager.Request 一个用于 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 的设备上可见。

于 2013-04-08T20:20:07.670 回答
1

当您使用该设备 API 中不可用的方法时,会发生 NoSuchMethodError。您可以通过在运行最新版本 Android 的模拟器上运行代码来测试是否是这种情况。您仍然可以保留较新的方法(并且您可能应该),但将其放在 try 语句中。如果您收到 NoSuchMethodError,那么您的代码正在旧设备上运行,您需要让您的 catch 语句使用变通方法。

于 2013-04-08T20:22:41.253 回答