如何轮流显示通知?

时间:2017-07-09 19:22:36

标签: android android-notifications

让我有一段时间。例如,{"11:40","11:55","16:15","20:05"}。 首先,我需要在11:40,然后在11:55等处显示一些通知,直到结束。每个通知都有自己的标题和文字。并且它们不应该更新(我的意思是,如果用户未按状态栏按下或删除在11:40显示的通知,则不应将下一个通知置于之前的通知上)。我知道如何使用AlarmManagerBroadcastReceiver显示通知,但我不知道如何解决此问题。我想象解决方案如下:当应用程序第一次打开时,我设置闹钟以在index = 0显示通知(其中index是数组索引的索引)。显示第一个通知时,我更新index并为下一个通知设置闹钟,依此类推,直到结束。最后,所有操作都取消,并且不会显示任何通知。但我无法想象如何构建这个想法。如何解决这个问题呢?可能吗?我需要Service吗?你能提供有用的步骤来解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您只需在给定时间调用此方法。

    private void notificationManager(Context context, String message,long time) {

    try {
        long when = //Set your own time here by passing it in the function

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

        Log.v("message", "," + message);

        Intent notificationIntent = new Intent(context, SplashActivity.class);


        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
        builder.setAutoCancel(true);
        builder.setContentTitle(context.getString(R.string.app_name));
        builder.setStyle(new NotificationCompat.BigTextStyle().bigText(message));
        builder.setContentText(message);
        builder.setTicker(message);
        builder.setLights(Color.GREEN, 500, 500);
        builder.setWhen(when);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
        builder.setSmallIcon(R.mipmap.ic_launcher);
        builder.setContentIntent(intent);


        Notification notification = builder.build();
        notification.ledARGB = 0xFFff0000;
        notification.flags = Notification.FLAG_SHOW_LIGHTS;
        notification.ledOnMS = 100;
        notification.ledOffMS = 100;
        notificationManager.notify(1, notification);

        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
        wl.acquire(15000);

    } catch (Exception e) {
        e.printStackTrace();
    }

}

只需在builder.set中传递时间,以毫秒为单位,您可以通过创建Calendar对象并在其中设置时间来完成。它会自动安排这些通知并在各自的时间显示它们。使用for循环一直传递并调用函数。

希望这个肝脏