如何在Android中使用AlarmManager设置多个通知

时间:2016-10-17 21:28:27

标签: android alarmmanager android-notifications android-alarms notificationmanager

我有一个包含项目的列表,用户可以在每个项目中为其设置通知,然后从通知中打开它。它工作正常,但我只能设置一个通知,如果它来自同一个项目或另一个项目无关紧要。如果我设置了多个,它只会显示最后一个。我不知道我还能做什么。这是我的代码

在item-detail类

    Long alertTime = new GregorianCalendar().getTimeInMillis() + 7 * 1000;

        Intent alertIntent = new Intent(getApplicationContext(), AlertReceiver.class);
        alertIntent.putExtra(DataBaseManager.CN_ID_APLICACION, idAplicacion);

        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime, PendingIntent.getBroadcast(getApplicationContext(), 1, alertIntent,
                PendingIntent.FLAG_UPDATE_CURRENT));

接收者:

public class AlertReceiver extends BroadcastReceiver {   
int idAplicacion;


@Override
public void onReceive(Context context, Intent intent) {

    idAplicacion = intent.getIntExtra(DataBaseManager.CN_ID_APLICACION, idAplicacion);

    Log.e("TESTING", "the id is " + String.valueOf(idAplicacion));
    createNotification(context, "some title", "some message text", "some sticker");
}

public void createNotification(Context context, String title, String msgText, String sticker)
{

    Intent i = new Intent(context, DetalleAplicacionActivity.class);
    i.putExtra(DataBaseManager.CN_ID_APLICACION, idAplicacion);


    PendingIntent notificIntent = PendingIntent.getActivity(context,0, i ,PendingIntent.FLAG_CANCEL_CURRENT);


    NotificationCompat.Builder mBuilder = new
            NotificationCompat.Builder(context)
            .setContentTitle(title)
            .setContentText(msgText)
            .setTicker(sticker)
            .setSmallIcon(R.drawable.ic_launcher)
            .setLargeIcon(BitmapFactory.decodeResource( context.getResources(), R.drawable.ic_launcher));


    mBuilder.setContentIntent(notificIntent);
    mBuilder.setDefaults(NotificationCompat.DEFAULT_VIBRATE);
    mBuilder.setAutoCancel(true);

    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(NotificationID.getID(), mBuilder.build());

   }
}

和         公共类NotificationID {

    private final static AtomicInteger c = new AtomicInteger(0);

    public static int getID() {
        return c.incrementAndGet();
    }
}

清单

     <uses-permissionandroid:name="com.android.alarm.permission.SET_ALARM"/>

    <receiver android:name=".Clases.AlertReceiver"/>

1 个答案:

答案 0 :(得分:1)

原因是您使用相同的requestCode创建通知 - 因此它们都被Android作为相同的通知进行威胁,您只需更新它。

在创建通知时使用一些变种

public void createNotification(Context context, String title, String msgText, String sticker) {
    ...
    PendingIntent notificIntent = PendingIntent.getActivity(context,
            java.util.Random.nextInt(100000), i ,PendingIntent.FLAG_CANCEL_CURRENT);
    ...
}