我正在使用DownloadManager
类以编程方式下载文件。一切正常,但我不能让下载完成通知持续。下载完成后立即消失。这是我的代码:
Request rqtRequest = new Request(Uri.parse(((URI) vewView.getTag()).toString()));
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
rqtRequest.setShowRunningNotification(true);
} else {
rqtRequest.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
((DownloadManager) getSystemService(DOWNLOAD_SERVICE)).enqueue(rqtRequest);
我在网上看到了一些与此相关的问题,但我找不到解决方案。
答案 0 :(得分:16)
DownloadManager
不支持关于Gingerbread的完成通知;你必须自己展示它。
使用BroadcastReceiver to detect when the download finishes并显示您自己的通知:
public class DownloadBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
//Show a notification
}
}
}
并在清单中注册:
<receiver android:name="com.zolmo.twentymm.receivers.DownloadBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
</intent-filter>
</receiver>
此外,在API级别11(Honeycomb)中添加了setNotificationVisibility
而不是ICS。我不确定您是否故意使用ICS常量,但您可以将代码更改为以下内容以使用Honeycomb上的系统通知:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
rqtRequest.setShowRunningNotification(true);
} else {
rqtRequest.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
答案 1 :(得分:2)
您必须为Gingerbread创建自己的下载完整通知。
首先,从DownloadManager
:
DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new Request(someUri);
//...
long downloadReference = downloadManager.enqueue(request);
然后在自定义BroacastReceiver
中收听下载完整广播:
IntentFilter filter = new IntentFilter( DownloadManager.ACTION_DOWNLOAD_COMPLETE);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override public void onReceive( Context context, Intent intent) {
long reference = intent.getLongExtra( DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (downloadReference == reference) {
// Send your own notification
}
}
};
registerReceiver( receiver, filter);
并发送您自己的下载完整通知。
答案 2 :(得分:0)
那么,您正在测试哪个版本?设置VISIBILITY_VISIBLE_NOTIFY_COMPLETED应设置通知,以便仅在下载完成时显示。如果通知在下载过程中显示,那么我必须假设您在ICS之前的平台上运行。我调试了应用程序。设置断点以查看正在执行的“if”选项。
答案 3 :(得分:0)
也许这是一种粗略(但简单)的方式:您可能更愿意在下载完成后创建新通知 P.S:嗯,我很抱歉,这实际上并不是对“为什么”提出质疑的答案,但它仍然可能对你有所帮助