Lut*_*ris 5 java sqlite android alarmmanager android-notifications
我正在尝试将存储在Sqlite中的时间列表 (具有小时和分钟)检索到警报管理器中,以通过通知执行提醒。我的方法是将存储在Sqlite中的所有计划时间循环到警报管理器中,以根据存储的时间列表执行通知,但是通知不会发出哔声。
但是当我指定一个时间(小时和分钟)时,它可以工作。以下是有效的代码示例,但我不希望这样:
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 10);
calendar.set(Calendar.MINUTE, 45);
Intent myIntent = new Intent(ListRemainder.this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(ListRemainder.this, 0, myIntent, 0);
alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
Run Code Online (Sandbox Code Playgroud)
但是,当要循环几个时间表时,它不起作用,这是我想要的方法,下面是代码示例,我还缺少什么?
//listOfTime is the one which contains the list of stored scheduled time in Sqlite.
for (int i = 0; i < listOfTime.size(); i++) {
int hour = Integer.parseInt(listOfTime.get(i).toString().substring(0, 2));
int minute = Integer.parseInt(listOfTime.get(i).toString().substring(3));
System.out.print("Hour : " + hour + " Minute : " + minute);
Log.d("MyActivity", "Alarm On");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
Intent myIntent = new Intent(ListRemainder.this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(ListRemainder.this, 0, myIntent, 0);
alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
}
Run Code Online (Sandbox Code Playgroud)
getBroadcast 的原型如下所示:
getBroadcast(Context context, int requestCode, Intent intent, int flags)
Run Code Online (Sandbox Code Playgroud)
为每个 PendingIntent 设置唯一的“requestCode”应该允许调度多个警报:
PendingIntent.getBroadcast(context, uniqueValue, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Run Code Online (Sandbox Code Playgroud)
为了保证用户关键警报的唤醒:
void setAlarmClock (AlarmManager.AlarmClockInfo info,
PendingIntent operation)
Run Code Online (Sandbox Code Playgroud)
来自文档:“安排一个代表闹钟的闹钟,该闹钟将用于在闹钟响起时通知用户。期望的是,当此闹钟触发时,应用程序将进一步唤醒设备以告诉用户有关警报——打开屏幕、播放声音、振动等。因此,系统通常还会使用此处提供的信息来告诉用户即将到来的警报(如果适用)。
由于这种警报的性质,类似于 setExactAndAllowWhileIdle(int, long, PendingIntent),即使系统处于低功耗空闲(也称为打瞌睡)模式,这些警报也将被允许触发。”
总结一下:
Lutaaya最终的解决方案:
AlarmManager.AlarmClockInfo(calendar.getTimeInMillis(),pendingIntent), pendingIntent);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
192 次 |
最近记录: |