Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让用户在Android中取消进度通知?_Android_Multithreading_Notifications_Interrupt - Fatal编程技术网

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

如何让用户在Android中取消进度通知?,android,multithreading,notifications,interrupt,Android,Multithreading,Notifications,Interrupt,我正在开发一个Android应用程序,用户可以从服务器下载内容。用户可以单击下载按钮,然后向服务器发送post请求,并返回包含数据的JSON字符串。JSON字符串中的一些数据是照片的URL,因此我给出了一个跟踪下载照片数量的通知,并使用该数字更新进度通知 我所有这些都工作得很好,不会给我带来任何麻烦。我现在遇到的问题更多的是从用户的角度来看的。如果我看到一个正在下载的通知,我可以将其刷走以取消它,但是因为我使用一个在下载照片时循环的线程更新我的通知,所以在我取消通知后,该线程几乎会立即重新创建通

我正在开发一个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(),您应该在那里输入取消代码-停止下载等