Android AlarmManager запускается сразу
В моей базе данных у меня есть список даты и времени в этом формате "гггг-мм-дд чч: мм". Каждую дату и время я хочу начать соответствующее уведомление. Но вместо этого уведомление начинается немедленно. Что случилось?
private void setAlarmFromDatabase(){
SQLiteDatabase db = mHelper.getReadableDatabase();
String sql = "SELECT _id, riserva_3 FROM riserva";
Cursor c = db.rawQuery(sql, null);
int count = c.getCount();
long[] data_ora = new long[count];
for(int i=0; i<count; i++) {
c.moveToNext();
String id = c.getString(0);
data_ora[i] = c.getLong(1);
}
c.close();
db.close();
AlarmManager[] alarmManager=new AlarmManager[24];
for(int ii=0;ii<data_ora.length;ii++)
{
alarmManager[ii] = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent i = new Intent(getBaseContext(), Notifica_scadenza.class);
PendingIntent displayIntent=PendingIntent.getBroadcast(getBaseContext(),ii,i,0);
alarmManager[ii].set(AlarmManager.RTC_WAKEUP,(data_ora[ii]), displayIntent);
}
this.finish();
overridePendingTransition(R.anim.right_in, R.anim.left_out);
}
} BroadcastReceiver
public class Notifica_scadenza extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent arg1) {
// Vibrate the mobile phone
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(1000);
showNotification(context);
}
private void showNotification(Context context) {
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
new Intent(context, Inserisci_entrate_uscite.class), 0);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.allarm_icon)
.setContentTitle(context.getString(R.string.app_name))
.setContentText(context.getString(R.string.titolo_scadenza));
mBuilder.setContentIntent(contentIntent);
mBuilder.setDefaults(Notification.DEFAULT_SOUND);
mBuilder.setAutoCancel(true);
NotificationManager mNotificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(1, mBuilder.build());
}
}
разрешение в Манифесте
<uses-permission android:name="android.permission.VIBRATE" android:required="false"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name="scad.Notifica_scadenza"></receiver>
1 ответ
Решение
Как упоминалось в CommonsWare, скорее всего, проблема в преобразовании даты. Перед циклом for определите также форматер даты, который вы можете использовать для форматирования полученной даты из базы данных.
final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault());
Теперь в цикле for попробуйте это:
try {
data_ora[i] = dateFormat.parse(cursor.getString(1)).getTime();
} catch (ParseException e) {
Log.e(TAG, "Something wrong happened while parsing the date.", e);
}
Вы также можете выйти из данных, чтобы увидеть, являются ли данные правильными или нет (сразу после строки выше).
Log.i("YOUR_TAG", "The id is: " + id + ", and the time: " + data_ora[i]);