Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用不同的内容制作重复通知_Java_Android_Push Notification_Broadcastreceiver_Alarmmanager - Fatal编程技术网

Java 如何使用不同的内容制作重复通知

Java 如何使用不同的内容制作重复通知,java,android,push-notification,broadcastreceiver,alarmmanager,Java,Android,Push Notification,Broadcastreceiver,Alarmmanager,我需要向具有不同内容的用户显示重复通知。我使用BroadcastReceiver并通过AlarmManager设置通知 我知道我可以使用AlarmManager.setRepeating,但它每次都显示相同的内容 例如,我需要根据用户选择的周数,每周显示一次通知。在每一个通知中,我需要显示本周和一些不同的文本。我没有找到StackOverflow的解决方案 这是相关代码 long timeInMills = mSharedPreferences.getLong("key_millis", 0);

我需要向具有不同内容的用户显示重复通知。我使用BroadcastReceiver并通过AlarmManager设置通知

我知道我可以使用
AlarmManager.setRepeating
,但它每次都显示相同的内容

例如,我需要根据用户选择的周数,每周显示一次通知。在每一个通知中,我需要显示本周和一些不同的文本。我没有找到StackOverflow的解决方案

这是相关代码

long timeInMills = mSharedPreferences.getLong("key_millis", 0);

Calendar alarmCalendar = Calendar.getInstance();
alarmCalendar.setTimeInMillis(timeInMills);
alarmCalendar.set(Calendar.HOUR_OF_DAY, 10);
alarmCalendar.set(Calendar.MINUTE, 0);

int currentWeek = (int) Utils.getTotalWeeks(timeInMills);

if (currentWeek <= 20) {
    AlarmHelper alarmHelper = AlarmHelper.getInstance();
    for (int i = currentWeek + 1; i < 21; i++) {
        alarmCalendar.add(Calendar.DATE, 7 * (currentWeek + 1));
        long time = alarmCalendar.getTimeInMillis();
        alarmHelper.setWeekAlarm(getApplicationContext(), WeekReceiver.class, time, i, i);
    }
}

问题是,如果用户在第一周,那么将创建20个通知,我认为我的方法不是很好,也许您可以帮助我找到另一个解决方案?

我不太确定您的代码的目的是什么,因为我不清楚这个问题。然而,我认为我在你的代码中发现了一个问题,我认为我应该与你分享

当您添加
日历
事件时,我认为您正在尝试在不同的周中以增量方式添加周。但是,在您的代码中,您似乎正在设置某个星期内的所有事件

我指的是以下代码。请参见代码中的注释

if (currentWeek <= 20) {
    AlarmHelper alarmHelper = AlarmHelper.getInstance();
    for (int i = currentWeek + 1; i < 21; i++) {

        // I think the following line should contain currentWeek + i instead of currentWeek + 1
        // alarmCalendar.add(Calendar.DATE, 7 * (currentWeek + 1)); 

        alarmCalendar.add(Calendar.DATE, 7 * (currentWeek + i)); // Like this to create events in consecutive weeks.

        long time = alarmCalendar.getTimeInMillis();
        alarmHelper.setWeekAlarm(getApplicationContext(), WeekReceiver.class, time, i, i);
    }
}

if(currentWeek)我的代码完全有效。在代码中,我错过了本周并从下周开始通知。你认为这是因为你没有在循环中添加本周吗?因为循环从currentWeek+1开始?我很困惑。我不记得为什么使用(Calendar.Date,7*(currentWeek+1));而不是简单的(Calendar.Date,7);谢谢……我会检查的。没问题。我希望你能找到问题。如果有帮助,请告诉我!:)很高兴知道这有帮助!祝你度过愉快的一天!
if (currentWeek <= 20) {
    AlarmHelper alarmHelper = AlarmHelper.getInstance();
    for (int i = currentWeek + 1; i < 21; i++) {

        // I think the following line should contain currentWeek + i instead of currentWeek + 1
        // alarmCalendar.add(Calendar.DATE, 7 * (currentWeek + 1)); 

        alarmCalendar.add(Calendar.DATE, 7 * (currentWeek + i)); // Like this to create events in consecutive weeks.

        long time = alarmCalendar.getTimeInMillis();
        alarmHelper.setWeekAlarm(getApplicationContext(), WeekReceiver.class, time, i, i);
    }
}