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.