我正在使用Android应用,用户可以从服务器下载内容。用户可以单击下载按钮,然后将发布请求发送到服务器并获取带有数据的JSON字符串。 JSON字符串中的一些数据是照片的网址,因此我会提供跟踪下载照片数量的通知,并使用该数字更新进度通知。
我把所有这些都搞好了,并没有给我带来任何麻烦。从用户的角度来看,我现在遇到的问题更多。如果我看到下载通知,我可以将其刷掉以解除它,但是因为我在下载照片时使用循环的线程更新我的通知,所以线程将在我解除它后几乎立即重新创建通知。
我认为这对用户来说可能非常烦人,并且想知道我如何链接滑动操作以通过对Notification线程的中断来删除通知。
有关于如何做到这一点的想法吗?我是在尝试解决一个不是真正问题的问题吗?我是以错误的方式来做这件事的吗?任何反馈都将不胜感激。
这是我的通知线程代码:
TripDownloadStatus prog = TripDownloadStatus.getStatus(notificationID);
//Loops; reading the progress many times a second
try{
while(prog.getTotalTasks() == 0 || prog.getComplTasks() < prog.getTotalTasks()){
Thread.sleep(200); //Roughly 5 times a second
prog = TripDownloadStatus.getStatus(notificationID);
final int max = prog.getTotalTasks();
final int cur = prog.getComplTasks();
//Check if there are photos in progress before we go into an
//infinite loop of waiting to do nothing.
if(max == 0 && prog.isJSONParsed())
break;
this.theBuilder.setProgress(max, cur, false);
manager.notify(this.notificationID, this.theBuilder.build());
}
} catch (InterruptedException ex){
return;
}
答案 0 :(得分:2)
使用deleteIntent使通知不可用是不好的做法 - 如果用户清除所有通知,它将停止下载,这可能不是用户的意图。作为用户,我不希望在通过全部清除按钮清除所有通知时取消下载。
您的案例是持续通知的教科书案例:
builder.setOngoing(true);
这样用户就无法解雇它 - 但现在你有责任在适当的时候解雇它。下载完成后,在您的情况下。
为了让用户取消操作,您需要使用
为通知添加按钮builder.addAction(icon, title, intent);
当用户触摸该按钮时,它将触发您服务上的onNewIntent(),并且您应该放置取消代码 - 停止下载等。