来自Android的已关闭通知栏中的下载管理器的消息

时间:2012-10-09 09:12:24

标签: android notifications download-manager android-notification-bar

我正在使用DownloadManager从URL下载xml文件。它工作正常,但我有两个问题:

1.。)如何在已关闭的通知栏中显示有关下载的消息?当我打开这个快照中显示的栏时,我可以显示一条消息:NotificationBar

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);  

4 个答案:

答案 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文件然后提取其内容并删除j​​ar文件的地方,我选择了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)

Notification overview。方法notify。方法cancel