带有自定义通知的下载管理器

DownloadManager with custom notification

我现在碰壁了,我想用 DownloadManager 下载一个文件,它正在运行。但是,我想自定义该通知,例如,而不是在右侧显示进度百分比,我想显示:DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR / DownloadManager.COLUMN_TOTAL_SIZE_BYTES 并在下载完成时添加一个按钮(但为此我下载完成后知道有接收器)

到目前为止我的代码是这样的:

DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(mpopup.apk));
NotificationCompat.Builder nBuilder = new NotificationCompat.Builder(this, "Channel_ID")
                                        .setOngoing(true)
                                        .setAutoCancel(false)
                                        .setContentTitle("DOWNLOAD FILE")
                                        .setContentText("Downloading 0MB/100MB")
                                        .setProgress(100,0,false);


request.setTitle("DOWNLOAD TITLE");
request.setVisibleInDownloadsUi(false);
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN);
downloadManager.enqueue(request);

如何更新通知中的进度条和文本?下载时

我已经尝试过:DownloadManager notification displays no percentage但是它不起作用并且只在完全下载后显示日志

不直接。您的应用未显示 Notification;你无法控制它的行为。

最可能的解决方案是不使用 DownloadManager,而是自己下载内容。然后,你可以显示任何你想要的 Notification.

中间立场是使用 DownloadManager,但设置标志和权限以允许您请求不显示通知的下载。然后,您可以拥有自己的 Notification. 这里的缺点是您可能无法重现系统提供的 Notification 的所有功能(例如,完成百分比进度指示器)。

// Changing the Notification Title, Description, and its Visibility
    DownloadManager mgr = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    Uri uri = Uri.parse("///.mp3");
    DownloadManager.Request req = DownloadManager.Request(uri);
    req.setTitle("Download");
    req.setDescription("Kick Ass Description");
    req.setVisibility(Request.VISIBILITY_VISIBLE_COMPLETION_ONLY);  

简短的回答是您无法更新通知,因为您无法控制它。

唯一的解决办法是自己管理下载和通知。