【问题标题】:how to manage multiple notifications from same application如何管理来自同一应用程序的多个通知
【发布时间】:2015-03-02 07:47:40
【问题描述】:

我是安卓新手。我正在开发触发通知的应用程序。当我在状态栏上有多个通知并单击第二个时,将打开第一个。我只能获得第一个通知的 ID。如何选择我单击的特定通知 ID。这是我的代码

 save.setOnClickListener(new OnClickListener() {

     for(int i=1;i<gpPeople.size();i++)
     {
         Context ctx = SetReminder.this.getApplicationContext();
         Intent intent = new Intent(SetReminder.this, AlarmReciever.class);
         intent.putExtra("contactName",gpPeople.get(i));
         intent.putExtra("id", id);//unique notification Id
         PendingIntent objPendingIntent = PendingIntent.getBroadcast(SetReminder.this, i, intent, 0);
         AlarmManager alarmManager = (AlarmManager)ctx.getSystemService(ctx.ALARM_SERVICE);
         alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, StartTime, cal.getTimeInMillis(), objPendingIntent);
     }
 }

AlarmReciever.java

 public void onReceive(final Context context, Intent intent) {

 name= extras.getString("contactName");
 String id= extras.getString("id");
 notificationIdentifier= Integer.parseInt(id);

 Intent intent1 = new Intent(context, Notifications.class);
 PendingIntent objPendingIntent = PendingIntent.getActivity(context, 0, intent1, 0);

 Intent intent2= new Intent(context, CancelNotification.class);
 intent2.putExtra("id", notificationIdentifier);
 PendingIntent objPendingCancel = PendingIntent.getActivity(context, 0, intent2, 0);

 Intent intent3= new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+phones.get(0).trim())); 
 PendingIntent objPendingCall = PendingIntent.getActivity(context, 0, intent3, 0);

 Intent intent4= new Intent(context, Snooze.class);
 intent4.putExtra("id", notificationIdentifier);
 intent4.putExtra("name", name);
 PendingIntent objPendingSnooze = PendingIntent.getActivity(context, 0, intent4, 0);

 notification = new Notification.Builder(context).
                setContentTitle(notificationTitle).
                setContentText(notificationMessage+" "+name).
                setAutoCancel(true).setSmallIcon(icon).
                setWhen(System.currentTimeMillis()).
                addAction(android.R.drawable.ic_menu_call,"call",objPendingCall).
                addAction(android.R.drawable.ic_menu_delete, "Cancel", objPendingCancel).
                addAction(android.R.drawable.ic_lock_idle_alarm,"Snooze",objPendingSnooze).
                setContentIntent(objPendingIntent).
                build();
            notification.defaults |= Notification.DEFAULT_SOUND;
            notification.defaults |= Notification.DEFAULT_VIBRATE;
            notification.defaults |= Notification.DEFAULT_LIGHTS;
            final NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.notify(notificationIdentifier, notification);
 }

当我点击任何一个通知的呼叫按钮时,只会操作第一个通知。请帮助我获取特定通知的 ID。提前致谢

【问题讨论】:

    标签: android notifications alarmmanager


    【解决方案1】:

    您的“notificationIdentifier”对于每个通知都应该是唯一的。

    你可以把通知代码放在一个方法中:

        public void notification (int notificationIdentifier){
    notification = new Notification.Builder(context).
                    setContentTitle(notificationTitle).
                    setContentText(notificationMessage+" "+name).
                    setAutoCancel(true).setSmallIcon(icon).
                    setWhen(System.currentTimeMillis()).
                    addAction(android.R.drawable.ic_menu_call,"call",objPendingCall).
                    addAction(android.R.drawable.ic_menu_delete, "Cancel", objPendingCancel).
                    addAction(android.R.drawable.ic_lock_idle_alarm,"Snooze",objPendingSnooze).
                    setContentIntent(objPendingIntent).
                    build();
                notification.defaults |= Notification.DEFAULT_SOUND;
                notification.defaults |= Notification.DEFAULT_VIBRATE;
                notification.defaults |= Notification.DEFAULT_LIGHTS;
                final NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
                notificationManager.notify(notificationIdentifier, notification);  
        };
    

    然后调用你想要的方法:

    notification (notificationIdentifier);
    

    如果 id 没有意义,你可以使用随机数:

    Random rand = new Random();
    notificationIdentifier = rand.nextInt(1000000) + 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多