我试图制作一个下载文件的方法,但是在请求中的方法内部,它调用了一个显示下载通知的函数。问题是我的应用程序所需的最小api是API 9,并且IDE显示错误,因为setNotificationVisibility适用于API 11及更高版本。
这是我的源代码:
public void init_download(String title, String filename, String url) {
File path = new File(Environment.DIRECTORY_DOWNLOADS);
if (!path.exists()) {
path.mkdirs();
}
Uri downloadUri = Uri.parse(url);
DownloadManager.Request request = new DownloadManager.Request(downloadUri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
.setAllowedOverRoaming(false)
.setTitle(title)
.setDescription(getResources().getString(R.string.downloading))
.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename);
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
long id = downloadManager.enqueue(request);
//Save the request id
SharedPreferences.Editor PrefEdit = shared_pref.edit();
PrefEdit.putLong("DOWNLOAD_ID", id);
PrefEdit.commit();
}
如何解决此问题以在两个版本中运行通知?
谢谢。
答案 0 :(得分:3)
将@SuppressLint("NewApi")
添加到您的函数声明中,这是:
@SuppressLint("NewApi")
public void init_download(String title, String filename, String url) {
}
答案 1 :(得分:1)
您可以使用@SuppressLint("NewApi")
解决警告,但在较低的API中,您的setNotificationVisibility将无法正常工作,因为支持包中没有DownloadManager。
答案 2 :(得分:1)
我通过更改通知的可见性解决了最后一个问题:
public void init_download(String title, String filename, String url) {
File path = new File(Environment.DIRECTORY_DOWNLOADS);
if (!path.exists()) {
path.mkdirs();
}
Uri downloadUri = Uri.parse(url);
DownloadManager.Request request = new DownloadManager.Request(downloadUri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
.setAllowedOverRoaming(false)
.setTitle(title)
.setDescription(getResources().getString(R.string.downloading))
.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
else {
request.setShowRunningNotification(true);
}
long id = downloadManager.enqueue(request);
//Save the request id
SharedPreferences.Editor PrefEdit = shared_pref.edit();
PrefEdit.putLong("DOWNLOAD_ID", id);
PrefEdit.commit();
}
这是将文件下载到Android设备的Downloads目录。
答案 3 :(得分:1)
您应该在方法之前添加@SuppressLint("NewApi")
。但是最好使用min sdk版本或者不使用这种方法。如果您添加@SuppressLint("NewApi")
,请不要忘记可以使用9 api在设备上运行app的用户。