在我的应用中,警报管理器用于向用户发送通知。通知发送后,它启动一个计时器,最后启动另一个操作;用户可以单击一个按钮来停止计时器,并在第二天重置警报。
警报时间以HH:mm格式保存在sqlite表格中,并通过带有循环的“ ArrayList of PendingIntent”来设置警报。
因此,如果当前时间在闹钟时间和闹钟时间+计时器之间,则单击按钮时要再次设置闹钟。
我使用for()
,将try()
与parceException
重复使用,以更改时间格式,然后进行比较,但这是行不通的。
代码如下:
public void onClick(View view) {
MEDPres=true;
ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>();
AlarmManager am = (AlarmManager) getContext().getSystemService(ALARM_SERVICE);
Calendar ora_allm = Calendar.getInstance();
Calendar ora_allm_piut = ora_allm;
Intent i;
PendingIntent pi;
boolean trovato= false;
int hrs,min,ID_M;
SimpleDateFormat parser = new SimpleDateFormat("HH:mm");
String NOME_M,TIPO_M,QUANTITA_M,O1,O2,O3;
String[] parts;
for(int contatore = 0; lista_allarmi.moveToNext() || trovato; contatore++) {
Date ORANOTIFICA;
ID_M=lista_allarmi.getInt(0);
NOME_M=lista_allarmi.getString(1);
TIPO_M=lista_allarmi.getString(2);
String ora_notifica= lista_allarmi.getString(3);
parts = ora_notifica.split(":");
hrs =Integer.parseInt(parts[0]); // ore
min = Integer.parseInt(parts[1]); // minuti
ora_allm.set(Calendar.HOUR_OF_DAY,hrs);
ora_allm.set(Calendar.MINUTE, min);
ora_allm.set(Calendar.SECOND, 0);
ora_allm_piut=ora_allm;
ora_allm_piut.add(Calendar.MINUTE, 5);
Date ORANOTIFICAPIUTIMER;
Date ora_attuale = Calendar.getInstance().getTime();
Date ORARIOATT;
i = new Intent(getContext(), AlarmReceiver.class);
i.putExtra("id", ID_M);
i.putExtra("NMM", NOME_M);
i.putExtra("TPM", TIPO_M);
pi = PendingIntent.getBroadcast(getContext(), contatore, i, PendingIntent.FLAG_UPDATE_CURRENT);
Toast.makeText(getContext(), "Prima del try", Toast.LENGTH_SHORT).show();
try{
ORANOTIFICA=parser.parse(ora_notifica);
ORANOTIFICAPIUTIMER=parser.parse(String.valueOf(ora_allm_piut));
ORARIOATT=parser.parse(String.valueOf(ora_attuale));
Toast.makeText(getContext(), "Dentro try", Toast.LENGTH_SHORT).show();
if (ORARIOATT.after(ORANOTIFICA) && ORARIOATT.before(ORANOTIFICAPIUTIMER)) {
ora_allm.add(Calendar.DATE,1);
//am.set(AlarmManager.RTC_WAKEUP, ora_allm.getTimeInMillis(), pi);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, ora_allm.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pi);
intentArray.add(pi);
trovato=true;
Toast.makeText(getContext(), "Medicina presa", Toast.LENGTH_SHORT).show();
}else {
//am.set(AlarmManager.RTC_WAKEUP, ora_allm.getTimeInMillis(), pi);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, ora_allm.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pi);
intentArray.add(pi);
}
}catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});