根据timepicker和Spinner值设置通知

时间:2016-05-05 10:59:20

标签: android notifications alarmmanager

我有两个时间选择器和微调器,值为1到10,我想在从两个时间选择器中选择的时间之间从微调器中选择本地通知的数量,例如从下午2点到下午6点我想要显示六个通知,它应该在所选时间范围内选择值通知每天,我已经使用了报警管理器,但它只显示了一个通知也使用了设置重复。

此外,我试图首先找到两个选择器的时差,并且应用了一些逻辑,但似乎没有什么好处。请给我一些逻辑或示例代码将不胜感激。

部分代码段是

Intent myIntent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
    myIntent, 0);
long next = 0;
for (int i = 0; i < spinnervalue ); i++) {
    Log.e("checkkkk ", "" + "checkkkk");
    alarmManager.set(AlarmManager.RTC_WAKEUP,  next, pendingIntent);
    next += diff_millis;
}

2 个答案:

答案 0 :(得分:0)

http://developer.android.com/reference/android/app/AlarmManager.html#set%28int,%20long,%20android.app.PendingIntent%29

  

如果声明的触发时间是过去的,则会触发警报   立即。如果已安排此Intent的警报   (两个意图的相等性由...定义   filterEquals(Intent)),然后它将被删除并替换为this   之一。

因此,将其设置为循环并不是您想要的。

您对millis的价值需要一段时间。 0表示纪元(1970年1月1日)。你可能想要的是&#34; SystemClock.elapsedRealtime()+ someValue&#34;传入了该参数。

答案 1 :(得分:0)

此代码段应该可以正常工作,可能只需进行一些更改。 在这里,我得到两个时间选择器之间的差异,以毫秒为单位,+ =到当前时间,以毫秒为单位。给每个待处理的意图一个不同的ID并告诉它更新和现有的ID(如果可用的话)(如果你知道ID(计数器),允许你重置它们)。 您必须通过所选的微调器来划分差异,以便获得均匀间隔的毫秒差异。

//Assume timepicker2 > timepicker1
int hours1 = timePicker1.getCurrentHour();
int minutes1 = timePicker1.getCurrentMinute();
int hours2 = timePicker2.getCurrentHour();
int minutes2 = timePicker2.getCurrentMinute();

int hourDiff = hours2-hours1;
int minutesDiff = minutes2-minutes1
int millisecondsDiff = hourDiff*60*60*1000;
millisecondsDiff += minutesDiff*60*1000;
Double period_diff = millisecondsDiff/spinnerValue;

//This is for the intent difference
int counter = 0;
long next = System.currentTimeMillis() + period_diff;

for (int i = 0; i < spinnervalue ); i++) {
    Intent myIntent = new Intent(this, AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, counter++, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    Log.e("checkkkk ", "" + "checkkkk");
    alarmManager.set(AlarmManager.RTC_WAKEUP,  next, pendingIntent);
    next += period_diff;
}

请不要让代码段明确地工作,因为它可以快速记下来,但它应该让您大致了解应该在哪里寻找。

另一个想法是使用i作为计数器,以便了解ID的范围。