我正在使用DownloadManager从URL下载xml文件。它工作正常,但我有两个问题:
1.。)如何在已关闭的通知栏中显示有关下载的消息?当我打开这个快照中显示的栏时,我可以显示一条消息:
2.。)如何以编程方式删除tis通知?
我的DownloadManager代码:
//Download XML file from URL
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(URL));
request.setTitle("Download von "+Name+".xml");
request.setDescription("Download von "+Name+".xml");
// in order for this if to run, you must use the android 3.2 to compile your app
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
request.setDestinationInExternalPublicDir(FileSeperator+"XML"+FileSeperator, Name + FileExtension);
// get download service and enqueue file
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
答案 0 :(得分:3)
DownloadManager
API提供了remove(long... ids)
方法,可让您从文件系统中删除下载的文件。 remove()
从文件系统和下载管理器应用程序的下载文件列表中删除该文件。它还会从系统通知抽屉中删除进度通知。只需将您收到请求时收到的ID传递给它。
可能有点令人惊讶的是,可能还有完成通知,如果您的下载成功完成,则DownloadManager 不 即使您使用下载请求ID致电remove()
,也会删除完成通知。
即使用户从下载管理器应用程序中删除该文件,它也将仅从系统通知抽屉中删除进度通知,但完成通知仍然存在。如果用户手动删除了应用程序,或者您已经以编程方式删除了下载(通过remove()
),那么通知会导致操作系统崩溃,报告“不幸的是,进程android .process.media已停止。“这似乎是一个Android错误。
即使NotificationManager
API无效,因为DownloadManager
拥有完成通知,不是您的应用。所以cancelAll()
不会有任何影响。
底线:如果您不想要完成通知,请不要使用值setNotificationVisibility()
在您的请求上致电VISIBILITY_VISIBLE_NOTIFY_COMPLETED
。默认可见性为VISIBILITY_VISIBLE
,仅显示进度通知。正如我所描述的那样,进度通知会自动消失。
如果您想要完全控制通知,可以将请求设置为使用VISIBILITY_HIDDEN
(需要权限android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
)。然后,您可以使用NotificationManager
API以常规方式显示您想要的任何自定义通知。
对于我的应用程序,在我下载jar文件然后提取其内容并删除jar文件的地方,我选择了VISIBILITY_VISIBLE
(没有完成通知)。以下是我创建请求的方式:
Request request = new Request(baseUrl + destinationFile))
.setDescription("file description")
.setDestinationInExternalFilesDir(mContext, null, destinationFile)
.setNotificationVisibility(Request.VISIBILITY_VISIBLE)
.setVisibleInDownloadsUi(true)
.setTitle("My App Title");
答案 1 :(得分:1)
是的,您可以在下载完成后显示通知。你也可以删除它。请关注此帖How can I programmatically open/close notifications in Android?
答案 2 :(得分:0)
您可以在broadcastReceiver的onReceive方法中使用以下功能
downloadManager.addCompletedDownload(YOUR_TITLE,YOUR_DESCRIPTION,true,YOUR_MIMETYPE,downloadedFile.getPath(),downloadedFile.getTotalSpace(),false);
BroadcastReceiver是这样的:
registerReceiver(broadcastReceiver,new IntentFilter(" android.intent.action.DOWNLOAD_COMPLETE"));
如果将最后一个参数设置为" true"如果下载完成,将显示通知。 如果设置为" false"通知仅在下载时显示,如果下载完成且通知自动取消
答案 3 :(得分:-1)