Android: Using AUTO-CANCEL on a notification when your app is running in the background

后端 未结 3 775
猫巷女王i
猫巷女王i 2020-12-14 02:25

I have looked at all the other AUTO-CANCEL-not-working questions here, and they all seem to involve mistakes that I am not making. I have tried both

builder         


        
相关标签:
3条回答
  • 2020-12-14 03:04

    You appear to be missing the PendingIntent and setContentIntent() call. I believe that is required for auto-cancel to work.

    Here is some Notification-displaying logic from this sample project that works:

      private void raiseNotification(Intent inbound, File output, Exception e) {
        NotificationCompat.Builder b=new NotificationCompat.Builder(this);
    
        b.setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL)
         .setWhen(System.currentTimeMillis());
    
        if (e == null) {
          b.setContentTitle(getString(R.string.download_complete))
           .setContentText(getString(R.string.fun))
           .setSmallIcon(android.R.drawable.stat_sys_download_done)
           .setTicker(getString(R.string.download_complete));
    
          Intent outbound=new Intent(Intent.ACTION_VIEW);
    
          outbound.setDataAndType(Uri.fromFile(output), inbound.getType());
    
          b.setContentIntent(PendingIntent.getActivity(this, 0, outbound, 0));
        }
        else {
          b.setContentTitle(getString(R.string.exception))
           .setContentText(e.getMessage())
           .setSmallIcon(android.R.drawable.stat_notify_error)
           .setTicker(getString(R.string.exception));
        }
    
        NotificationManager mgr=
            (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    
        mgr.notify(NOTIFY_ID, b.build());
      }
    
    0 讨论(0)
  • 2020-12-14 03:07

    So apparently you do need a pending intent.

    At Android - notification manager, having a notification without an intent, I found a solution that grabs the current active application as your pending intent (so that you don't have to start your own activity in order to dismiss the notification).

    I just added the following two lines of code (right after setting the auto-cancel):

    PendingIntent notifyPIntent = 
        PendingIntent.getActivity(getApplicationContext(), 0, new Intent(), 0);     
    builder.setContentIntent(notifyPIntent);
    

    It worked great. I would say that if you don't want your activity to restart as a result of the user clicking your notification, then this is your best option.

    0 讨论(0)
  • 2020-12-14 03:07

    Hai dear friend if you want to show non cancelable notification(not cancelable for users) for a particular time and after that you need clear it (like the music player) you can use this.

    mNotificationBuilder .setSmallIcon(android.R.drawable.btn_plus);
    mNotificationBuilder .setContentTitle("My notification");
    mNotificationBuilder .setContentText("Notificattion From service");
    mNotificationBuilder .setLights(0xFF0000FF, 500, 500);
    
    Notification note = mNotificationBuilder.build();  
    note.flags = Notification.FLAG_ONGOING_EVENT; // For Non cancellable notification
    mNotificationManager.notify(NOTIFICATION_ID, note);
    
    0 讨论(0)
提交回复
热议问题