java.lang.NoSuchMethodError:android.app.DownloadManager$Request.setNotificationVisibility

java.lang.NoSuchMethodError:android.app.DownloadManager$Request.setNotificationVisibility,android,download-manager,Android,Download Manager,试着像这样使用 在Android清单中添加了以下权限 <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/> 在运行时获取以下错误 java.lang.NoSuchMethodError: android.app.DownloadManager$Request.setNotificationVisibility 为什么会出现这种错误?如何让DownloadManager

试着像这样使用

在Android清单中添加了以下权限

<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>

在运行时获取以下错误

java.lang.NoSuchMethodError: android.app.DownloadManager$Request.setNotificationVisibility

为什么会出现这种错误?如何让DownloadManager工作

我是否需要使用两个单独的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的设备是可见的

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

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

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

您运行代码的API版本是什么?同意。请注意,
setNotificationVisibility()
对于API级别11是新的,即使
DownloadManager
本身可以恢复到API级别9。@commonware我在2.3.6上运行它。我是否需要使用两个独立的
下载管理器。请求
一个用于API 9,另一个用于API 11?您运行代码的API版本是什么?同意。请注意,
setNotificationVisibility()
对于API级别11是新的,即使
DownloadManager
本身可以恢复到API级别9。@commonware我在2.3.6上运行它。我是否需要使用两个独立的
下载管理器。请求
一个用于API 9,另一个用于API 11?我是否可以使用弃用的方法
设置ShowRunningNotification(布尔显示)
使其在API级别9和10中不可见?@codingcrow:哦,是的,这应该行得通——抱歉没有注意到。我可以使用不推荐的方法
setShowRunningNotification(boolean show)
使其在API级别9和10中不可见吗?@codingcrow:哦,是的,应该行——抱歉没有注意到。没关系,我的答案是更一般的建议,因为他的建议非常具体。没关系,我的回答是更一般的建议,因为他的建议非常具体。