单击“时未取消Android通知”;addAction“;偶像

单击“时未取消Android通知”;addAction“;偶像,android,Android,我是android新手,正在开发带有通知的应用程序 我需要显示一个带有额外按钮的通知;当我点击它时,我需要进入我的应用程序中的一些活动。说“设置活动” 我有以下代码。它工作正常,但当按下addAction图标时,通知不会自动取消 有什么想法吗? 我的代码看起来像 Intent intent = new Intent(context, SettingsActivity.class); PendingIntent pIntent = PendingIntent.getActivity(context

我是android新手,正在开发带有通知的应用程序

我需要显示一个带有额外按钮的通知;当我点击它时,我需要进入我的应用程序中的一些活动。说“设置活动”

我有以下代码。它工作正常,但当按下addAction图标时,通知不会自动取消

有什么想法吗?
我的代码看起来像

Intent intent = new Intent(context, SettingsActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder builder =  
        new NotificationCompat.Builder(context)  
        .setSmallIcon(R.drawable.ic_launcher)  
        .setContentTitle("Notifications Example")  
        .setContentText("This is a test notification");  

builder.setDefaults(Notification.DEFAULT_ALL);

builder.setLights(Color.parseColor("#fec317"), 300, 1000);

Intent notificationIntent = new Intent(context, MainActivity.class);  
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent,   
        PendingIntent.FLAG_UPDATE_CURRENT);  
builder.setContentIntent(contentIntent);  

builder.addAction(R.drawable.delete, "Call", pIntent);
builder.setAutoCancel(true);
NotificationManager manager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);  
manager.notify(0, builder.build());

解决方法:您可以使用
mNotificationManager.cancel(id)手动删除它
其中
id
是创建此通知时传递的id

您可以制作一个广播接收器,用于侦听两个事件,一个用于启动通知,另一个用于停止通知。下面是我目前在我的一个项目中使用的一个示例。请随便问你没有得到什么

public class sendMessageBroadcast extends BroadcastReceiver {
    RemoteViews remoteViews;
    private static Thread thread;
    NotificationManager notificationManager;
    Notification notification;
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("sendMessageBroadcast", "received");
        notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        remoteViews = new RemoteViews(context.getPackageName(), R.layout.customnotification);
        int SITUATION_ID = intent.getIntExtra("SITUATION_ID",-1);
        Intent remoteViewsIntent = new Intent("com.itcse.Situation.cancelNotification");
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
                0, remoteViewsIntent, PendingIntent.FLAG_UPDATE_CURRENT);//getActivity(getBaseContext(),0,intent, PendingIntent.FLAG_UPDATE_CURRENT);

        if(intent.getAction().equals("com.itcse.Situation.cancelNotification"))  {
            thread.interrupt();
        }
        else {

            Log.d("Cancel Messge",""+ SITUATION_ID);

            if(Build.VERSION.SDK_INT <= 10 ){

                remoteViews.setViewVisibility(R.id.bCancel, View.GONE);
                remoteViews.setViewVisibility(R.id.tvCancelNotification, View.VISIBLE);
                notification = new Notification(R.drawable.situation,"Sending Situation",System.currentTimeMillis());
                notification.contentIntent = pendingIntent;
                notification.contentView = remoteViews;
                notification.flags = Notification.FLAG_AUTO_CANCEL;

                updateProgressBar(notification);
            }
            else {

                remoteViews.setOnClickPendingIntent(R.id.bCancel, pendingIntent);
                NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
                builder.setAutoCancel(true).setContent(remoteViews).setTicker("Sending Situation Message")
                        .setWhen(System.currentTimeMillis()).setSmallIcon(R.drawable.situation);

                if (Build.VERSION.SDK_INT >= 11 && Build.VERSION.SDK_INT <15){
                    updateProgressBar(builder.getNotification());
                }
                else if(Build.VERSION.SDK_INT >=15){
                    updateProgressBar(builder.build());
                }
            }
        }
    }

    public void updateProgressBar(final Notification notification){
        thread = new Thread(new Runnable() {
            @Override
            public void run() {
                //unregisterReceiver(broadcastReceiver);
                int incr;
                boolean send=true;
                for(incr = 0;incr<=100;incr+=10){
                    remoteViews.setProgressBar(R.id.progressBar, 100, incr, false);
                    notificationManager.notify(1,notification);
                    if(Thread.currentThread().isInterrupted()){
                        Log.d("Thread", "Interrupted");
                        send=false;
                        break;
                    }

                    try{
                        Thread.sleep(1000);
                    }
                    catch (InterruptedException e){
                        Log.d("Thread", "Thread interrupted while sleeping");
                        send = false;
                        break;
                    }
                }
                Log.d("Thread","Value of incr "+incr);
                remoteViews.setViewVisibility(R.id.bCancel, View.GONE);
                remoteViews.setViewVisibility(R.id.tvCancelNotification, View.GONE);
                remoteViews.setViewVisibility(R.id.progressBar, View.GONE);
                if(send) {
                    sendMessage();
                    remoteViews.setTextViewText(R.id.tvNotificationHeading, "Message send");
                }
                else {
                    remoteViews.setTextViewText(R.id.tvNotificationHeading, "Message not send");
                    notification.tickerText = "Message not send";
                }
                notificationManager.notify(1, notification);
            }
        });
        thread.start();
    }

    private void sendMessage() {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage("5556",null,"3G",null,null);
    }
}
公共类sendMessageBroadcast扩展了BroadcastReceiver{
远程视图远程视图;
私有静态线程;
通知经理通知经理;
通知;
@凌驾
公共void onReceive(上下文、意图){
Log.d(“sendMessageBroadcast”、“received”);
notificationManager=(notificationManager)context.getSystemService(context.NOTIFICATION\u服务);
RemoteView=新的RemoteView(context.getPackageName(),R.layout.customnotification);
int-SITUATION\u ID=intent.getIntExtra(“SITUATION\u ID”,-1);
Intent RemoteViewsInt=新的Intent(“com.itcse.Situation.cancelNotification”);
PendingEvent PendingEvent=PendingEvent.getBroadcast(上下文,
0,RemoteViewsInt,PendingEvent.FLAG_UPDATE_CURRENT);//getActivity(getBaseContext(),0,intent,PendingEvent.FLAG_UPDATE_CURRENT);
if(intent.getAction().equals(“com.itcse.Situation.cancelNotification”)){
thread.interrupt();
}
否则{
Log.d(“取消消息”,“情况ID”);
if(Build.VERSION.SDK_INT=11&&Build.VERSION.SDK_INT=15){
updateProgressBar(builder.build());
}
}
}
}
public void updateProgressBar(最终通知){
线程=新线程(新可运行(){
@凌驾
公开募捐{
//未注册接收器(广播接收器);
国际增量;
布尔send=true;
对于(增量=0;增量