2012-10-19 17 views
39

Właśnie zacząłem pracować z powiadomieniami, a teraz próbuję usunąć powiadomienie i uruchomić aplikację po kliknięciu powiadomienia w centrum powiadomień.Usuwanie powiadomienia po kliknięciu

Starałem się pracować z następującego kodu:

import android.app.NotificationManager; 

public class ExpandNotification { 
    private int NOTIFICATION = 546; 
    private NotificationManager mNM; 

    public void onCreate() { 
     mNM.cancel(NOTIFICATION); 
     setContentView(R.layout.activity_on); 
     //Toast.makeText(this, "stopped service", Toast.LENGTH_SHORT).show(); 
    } 

myślę, że ten kod wykonuje drugą klasę podczas podsłuchu?

PendingIntent contentIntent = PendingIntent.getActivity(this, REQUEST_CODE, new Intent(this, ExpandNotification.class), 0); 

Jednak powiadomienie nie znika, ani nie uruchamia się aplikacja. Ale jestem w stanie przesunąć go w lewo lub w prawo, aby go usunąć, ale to nie jest to, co chcę ..

Odpowiedz

71

Użyj flagę Notification.FLAG_AUTO_CANCEL

Notification notification = new Notification(icon, tickerText, when); 
notification.setLatestEventInfo(context, contentTitle, contentText, pendingIntent); 

// Cancel the notification after its selected 
notification.flags |= Notification.FLAG_AUTO_CANCEL; 

i uruchomić aplikację:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

// Create a new intent which will be fired if you click on the notification 
Intent intent = new Intent(context, App.class); 

// Attach the intent to a pending intent 
PendingIntent pendingIntent = PendingIntent.getActivity(context, intent_id, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
+0

Dzięki, to się stało :) – user1756912

+0

Cieszę się, że pomogło!:) – input

+2

Co stanie się z sytuacją, gdy nie określisz ContentIntent (chcesz tylko, aby powiadomienie zostało usunięte po dotknięciu)? W tym przypadku flaga auto_cancel nie wydaje się pomagać ... –

90

Aby uzyskać ten sam efekt za pomocą Notification.Builder lub NotificationCompat.Builder zadzwoń pod numer setAutoCancel(true) w instancji Builder.

+0

Dzięki .. działa .. –

6

Ta odpowiedź jest zbyt późno, ale specjalnie piszę następujące rozwiązanie, ponieważ konstruktor zgłoszenie stać przestarzałe więc korzystać z powiadomień za pomocą konstruktora, jak następuje:

**.setAutoCancel(true)** is used to remove notification on click 

i całe zgłoszenie jest jak follwoing:

private void makeNotification(String title,String msg){ 

    Intent resultIntent = new Intent(this, MasterActivity.class); 

    PendingIntent resultPendingIntent = 
      PendingIntent.getActivity(
        this, 
        0, 
        resultIntent, 
        PendingIntent.FLAG_UPDATE_CURRENT 
      ); 

    NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(this) 
        .setContentIntent(resultPendingIntent) 
        .setSmallIcon(R.drawable.ic_launcher) 
        .setContentTitle(title) 
        .setAutoCancel(true) 
        .setContentText(msg); 

    int mNotificationId = 001; 
    NotificationManager mNotifyMgr = 
      (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    mNotifyMgr.notify(mNotificationId, mBuilder.build()); 

} 

Wywołanie tej metody z tytułem i wiadomością zapewnia doskonałe powiadomienie.

2

Najlepszy sposób ustawiono na builder.setAutoCancel(true) anulowanie powiadomienia po kliknięciu w powiadomienie. Mam nadzieję, że ten kod ci pomoże.

Builder powiadomienia

NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 
builder.setSmallIcon(android.R.drawable.btn_star); 
builder.setContentTitle("This is title of notification"); 
builder.setContentText("This is a notification Text"); 
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)); 

dla otwartych działalność na kliknięcie powiadomienia

Intent intent = new Intent(Broadcastdemo.this, ThreadDemo.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 113,intent, PendingIntent.FLAG_UPDATE_CURRENT); 
builder.setContentIntent(pendingIntent); 
builder.setAutoCancel(true); 

Pokaż narzędziu do tworzenia w zgłoszeniu

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
manager.notify(114, builder.build()); 

Kompletna kod koncert powiadomienie z ikona, obraz, tytuł, opis, automatyczne anulowanie i po kliknięciu otwórz działanie

public void ShowIntentNotification(View v) 
    { 
     NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 
     builder.setSmallIcon(android.R.drawable.btn_star); 
     builder.setContentTitle("This is title of notification"); 
     builder.setContentText("This is a notification Text"); 
     builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)); 

     Intent intent = new Intent(Broadcastdemo.this, ThreadDemo.class); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 113,intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     builder.setContentIntent(pendingIntent); 
     builder.setAutoCancel(true); 

     NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     manager.notify(114, builder.build()); 

    } 
0

dla mojego to że

.setPriority(Notification.PRIORITY_HIGH); 

który był przyczyną zgłaszania nie wiadomo po click ... upewnij się użyć:

.setPriority(Notification.PRIORITY_DEFAULT); 

I .setAutoCancel(true) powinno działać.

Powiązane problemy