如何让用户在Android中取消进度通知?
我正在开发一个Android应用程序,用户可以从服务器下载内容。用户可以单击下载按钮,然后向服务器发送post请求,并返回包含数据的JSON字符串。JSON字符串中的一些数据是照片的URL,因此我给出了一个跟踪下载照片数量的通知,并使用该数字更新进度通知 我所有这些都工作得很好,不会给我带来任何麻烦。我现在遇到的问题更多的是从用户的角度来看的。如果我看到一个正在下载的通知,我可以将其刷走以取消它,但是因为我使用一个在下载照片时循环的线程更新我的通知,所以在我取消通知后,该线程几乎会立即重新创建通知 我想这对用户来说可能非常烦人,我想知道如何将刷卡删除通知的操作与通知线程的中断联系起来 有没有办法做到这一点?我是在试图解决一个不是真正问题的问题吗?我走错方向了吗?如有任何反馈,将不胜感激 以下是我的通知线程代码:如何让用户在Android中取消进度通知?,android,multithreading,notifications,interrupt,Android,Multithreading,Notifications,Interrupt,我正在开发一个Android应用程序,用户可以从服务器下载内容。用户可以单击下载按钮,然后向服务器发送post请求,并返回包含数据的JSON字符串。JSON字符串中的一些数据是照片的URL,因此我给出了一个跟踪下载照片数量的通知,并使用该数字更新进度通知 我所有这些都工作得很好,不会给我带来任何麻烦。我现在遇到的问题更多的是从用户的角度来看的。如果我看到一个正在下载的通知,我可以将其刷走以取消它,但是因为我使用一个在下载照片时循环的线程更新我的通知,所以在我取消通知后,该线程几乎会立即重新创建通
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;
}
TripDownloadStatus prog=TripDownloadStatus.getStatus(notificationID);
//环;一秒钟看很多次进度
试一试{
而(prog.getTotalTasks()==0 | | prog.getComplTasks()
将通知与deleteIntent一起解除是一种糟糕的做法-如果用户清除了所有通知,它将停止下载,而这可能不是用户想要的。作为一个用户,我不希望在通过“全部清除”按钮清除所有通知时取消下载
您的案例是持续通知的教科书案例:
builder.setOngoing(true);
这样用户就不能拒绝它,但现在你有责任在适当的时候拒绝它。在您的情况下,下载完成后
为了让用户取消操作,您需要使用向通知添加一个按钮
builder.addAction(icon, title, intent);
当用户点击该按钮时,它将在您的服务上触发onNewIntent(),您应该在那里输入取消代码-停止下载等