gpt4 book ai didi

android - 通知上的取消按钮以删除通知

转载 作者:行者123 更新时间:2023-11-29 17:54:04 24 4
gpt4 key购买 nike

我有一个 Notification,它有一个 Progress Bar 和一个 Cancel 按钮。我正在使用线程来增加进度条,取消按钮应该清除通知。

这是通知的代码

    remoteViews = new RemoteViews(getPackageName(), R.layout.customnotification);
Intent intent = new Intent(this, LocationBroadcastReceiver.class);
intent.putExtra("CancelServiceAndNotification","CancelServiceAndNotification");
intent.putExtra("ID",1);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(),
0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.bCancel, pendingIntent);

使用线程递增进度条的代码

     thread = new Thread(new Runnable() {
@Override
public void run() {
int incr;
for(incr = 0;incr<=100;incr+=10){
remoteViews.setProgressBar(R.id.progressBar, 100, incr, false);
if(cancelNotification){

}
notificationManager.notify(1,notification);
try{
Thread.sleep(1000);
}
catch (Exception e){

}

}
notificationManager.cancel(1);
}
});
thread.start();

在 Broadcast Receiver 中,我尝试使用

取消通知
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(ID);

问题是当我点击 Cancel 按钮时,通知消失了一秒钟然后又出现,这可能是由于线程仍在运行。如何从广播接收器类中销毁线程?我应该怎么做才能删除点击取消按钮时的通知?

最佳答案

要停止线程,您应该中断它,例如,当您的 BroadcastReceiver 收到“CancelServiceAndNotification”时,您可以调用:

thread.interrupt();

然后,在你的 run() 方法中:

    if (Thread.currentThread().isInterrupted()) {
// we were interrupted, should stop immediately
return;
}

如果线程在休眠时被中断,它将抛出 InterruptedException 并清除中断标志,因此在您的情况下,run() 返回非常重要 捕获 InterruptedException 时:

    try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// we were interrupted, should stop immediately
return;
}

你应该像你一样取消通知:

// make sure you pass 1 as id here as you use it for notify()
notificationManager.cancel(1);

这应该有效。

但是,强烈建议不要从非主线程更新 UI(在调用 remoteViews.setProgressBar 时从自定义线程执行)。

我建议使用自定义 AsyncTaskdoInBackground 中执行后台作业(而不是您的 run() 方法并更新您的通知进度它的 onProgressUpdate
您可以通过调用 cancel() 来取消 AsyncTask,方法与上面所示的 interrupt() 线程类似。

希望对您有所帮助。

关于android - 通知上的取消按钮以删除通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20846467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com