2016-04-23 109 views
1

一旦用户从通知栏中点击通知,我就很难关闭通知。我知道setAutoCancel方法,但它似乎不工作。不过这是我的代码。如何在用户点击通知时关闭通知

MondayNotificationService.class

@Override 
public void onReceive(Context context, Intent intent) { 
    final NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    final NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
     builder.setSmallIcon(R.drawable.icon); 
     builder.setContentTitle(context.getString(R.string.app_name)); 

    if (intent.getAction().equalsIgnoreCase("FirstPeriod")) { 
     builder.setContentText("Microwave Engineering"); 
     builder.setContentIntent(PendingIntent.getActivity(context, 100, new Intent(context, Monday.class), 0)); 
     Notification notification = builder.build(); 
     builder.setAutoCancel(true); 
     int notificationID = 100; 
     notificationManager.notify(notificationID, notification); 

     Handler handler = new Handler(); 
     long delayInMilliseconds = 300000; 
     handler.postDelayed(new Runnable() { 
      public void run() { 
       notificationManager.cancel(100); 
      } 
     }, delayInMilliseconds); 

    } if (intent.getAction().equalsIgnoreCase("SecondPeriod")) { 
     builder.setContentText("Digital Signal Processing"); 
     builder.setContentIntent(PendingIntent.getActivity(context, 101, new Intent(context, Monday.class), 0)); 
     Notification notification = builder.build(); 
     int notificationID = 101; 
     builder.setAutoCancel(true); 
     notificationManager.notify(notificationID, notification); 

     Handler handler = new Handler(); 
     long delayInMilliseconds = 300000; 
     handler.postDelayed(new Runnable() { 
      public void run() { 
       notificationManager.cancel(101); 
      } 
     }, delayInMilliseconds); 
    } 

Monday.class

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_monday); 

    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 

    Intent firstIntent = new Intent(this, MondayNotificationService.class); 
    firstIntent.setAction("FirstPeriod"); 
    PendingIntent firstAlarmIntent = PendingIntent.getBroadcast(this, 100, firstIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    calendar.set(2016, 3, 23, 20, 40, 0); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), firstAlarmIntent); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, firstAlarmIntent); 

    Intent secondIntent = new Intent(this, MondayNotificationService.class); 
    secondIntent.setAction("SecondPeriod"); 
    PendingIntent secondAlarmIntent = PendingIntent.getBroadcast(this, 101, secondIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    calendar.set(2016, 3, 23, 20, 12, 0); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), secondAlarmIntent); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, secondAlarmIntent); 

而且在通知5分钟后到期,我打开应用程序,然后点击 “周一” 按钮那么所有通知都会立即显示在通知栏中(即使是过期的通知)。 任何帮助了解发生了什么问题将深表谢意。

+1

你需要调用'setAutoCancel()'然后'建立()''的Notification'。 –

回答

3

正如Mike M.指出的那样,您需要在致电build()之前配置Builder

您有:

Notification notification = builder.build(); 
    builder.setAutoCancel(true); 

扭转这些行:

builder.setAutoCancel(true); 
    Notification notification = builder.build(); 
+0

你指定的方法似乎正在工作,但问题是,每当我点击我的应用程序的按钮,所有的通知同时发出。任何修补? –

+0

@SiddharthSaxena:那么,你正在设置两个闹钟,两个月前就会关闭(2016年3月23日)。尝试在未来选择一段时间。 :-) – CommonsWare

+0

好吧,我会尽力:) –

0

notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL

按照文档

位被按位或为当用户点击,如果该通知应取消应设置标志字段