如何让用户在Android中取消进度通知?

时间:2014-05-26 20:51:47

标签: android multithreading notifications interrupt

我正在使用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;
    }

1 个答案:

答案 0 :(得分:2)

使用deleteIntent使通知不可用是不好的做法 - 如果用户清除所有通知,它将停止下载,这可能不是用户的意图。作为用户,我不希望在通过全部清除按钮清除所有通知时取消下载。

您的案例是持续通知的教科书案例:

builder.setOngoing(true);

这样用户就无法解雇它 - 但现在你有责任在适当的时候解雇它。下载完成后,在您的情况下。

为了让用户取消操作,您需要使用

为通知添加按钮
builder.addAction(icon, title, intent);

当用户触摸该按钮时,它将触发您服务上的onNewIntent(),并且您应该放置取消代码 - 停止下载等。