为什么"下载完成"通知会在Gingerbread设备上消失?

Mri*_*lla 15 android android-notifications android-notification-bar android-download-manager

我正在使用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);
Run Code Online (Sandbox Code Playgroud)

我在网上看到了一些与此相关的问题,但我找不到解决方案.

Dav*_*unt 16

DownloadManager不支持Gingerbread的完成通知; 你必须自己展示它.

使用BroadcastReceiver检测下载完成时间并显示您自己的通知:

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并在您的清单中注册:

<receiver android:name="com.zolmo.twentymm.receivers.DownloadBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

此外,setNotificationVisibility还添加了API级别11(Honeycomb)而不是ICS.我不确定您是否故意使用ICS常量,但您可以将代码更改为以下内容以使用Honeycomb上的系统通知:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    rqtRequest.setShowRunningNotification(true);  
} else {
    rqtRequest.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
Run Code Online (Sandbox Code Playgroud)