2016-10-20 4 views
1

Wenn ich auf eine Schaltfläche klicke, erstelle ich eine Benachrichtigung in der Statusleiste.Eine Benachrichtigung von einer anderen Aktivität abbrechen - Android

Durch Klicken auf diese Benachrichtigung wird eine Aktivität erstellt.

Im Layout dieser Aktivität befindet sich eine Schaltfläche.

Wenn ich auf diese Schaltfläche klicke, muss die Benachrichtigung, die die Aktivität erstellt hat, in der sich die Schaltfläche befindet, abgebrochen werden.

Das Problem kommt, weil ich mehr als eine Benachrichtigungen erstellen kann, um ihnen unterschiedliche IDs zu geben.

Aber wenn ich die Statusleiste öffne, sehe ich alle Benachrichtigungen, ich wähle eine aus, die Aktivität wird erstellt und ich klicke auf die Schaltfläche, um die Aktivität abzubrechen.

Was passiert ist, dass die Benachrichtigung abgebrochen ist immer die letzte erstellt, anstatt die, die ich ausgewählt habe.

Dies ist der Code aus der Haupttätigkeit, an die Benachrichtigungen erstellt werden:

import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Build; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.ButtonBarLayout; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class NotifMenuActiv extends AppCompatActivity { 

private Button but_notif, but_cancel; 
private NotificationManager mNotificationManager; 
private Notification.Builder mBuilder; 
private EditText id; 
private Intent resultIntent; 
private PendingIntent pIntent; 
private int req_code = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_notif_menu); 
    mNotificationManager = (NotificationManager)getSystemService(Context 
      .NOTIFICATION_SERVICE); 
    mBuilder = new Notification.Builder(this); 
    mBuilder.setSmallIcon(R.drawable.joda); 
    resultIntent = new Intent(this, NotifActiv.class); 
    id = (EditText)findViewById(R.id.id); 
    but_notif = (Button)findViewById(R.id.but_notif); 
    but_notif.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
       resultIntent.putExtra("id", Integer.valueOf(id.getText(). 
         toString())); 
       pIntent = PendingIntent.getActivity(getApplicationContext(), 
         req_code++, resultIntent, PendingIntent 
           .FLAG_UPDATE_CURRENT); 
       mBuilder.setContentIntent(pIntent); 
       mBuilder.setContentTitle(id.getText().toString()); 
       mNotificationManager.notify(Integer.valueOf(id.getText(). 
         toString()),mBuilder.build()); 
       mBuilder.setContentText(Integer.valueOf(mNotificationManager 
         .getActiveNotifications().length).toString()); 
       mNotificationManager.notify(Integer.valueOf(id.getText(). 
         toString()),mBuilder.build()); 

      } 
     } 
    }); 
    but_cancel = (Button)findViewById(R.id.but_cancel1); 
    but_cancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mNotificationManager.cancel(Integer.valueOf(id.getText(). 
        toString())); 
     } 
    }); 
} 
} 

Und das ist die onCreate Methode aus der Aktivität erstellt, wenn ich auf eine Meldung klicken:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_notif); 
    Intent intent = getIntent(); 
    id = intent.getIntExtra("id",id); 
    mNotificationManager = (NotificationManager)getSystemService(Context 
      .NOTIFICATION_SERVICE); 
    but_exit = (Button)findViewById(R.id.but_exit); 
    but_exit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 

// This is the button that must cancel the notification that created 
// the activity 
    but_cancel = (Button)findViewById(R.id.but_cancel2); 

    but_cancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mNotificationManager.cancel(id); 
     } 
    }); 
} 

Vielen Dank.

Antwort

1

Gelöst !!! Die Lösung besteht darin, jedem PedingIntent einen anderen requestCode zu geben.

Statt dessen:

PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(),0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

Tun Sie dies:

PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(),req_code++, resultIntent,PendingIntent.FLAG_UPDATE_CURRENT); 
Verwandte Themen