Задаю будильник следующим образом
Код: Выделить всё
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), Interval, pIntent);
Код: Выделить всё
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), Interval, pIntent);
Ну вообще кол-во дней статичное, за исключением февраля в високосный год.nikomp писал(а):Добрый день!
Задаю будильник следующим образомпроблема в том, что не знаю как задать интервал срабатывания, например "каждый месяц" (например 23 числа каждого месяца), ведь в месяце может быть разное кол-во дней.Код: Выделить всё
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), Interval, pIntent);
а как же 30 и 31 число ))). например мне нужно чтоб напоминание срабатывало каждое 20 число каждого месяца. если напоминание например ставить в марте (31 день) и задать интервал 30, оно сработает 19 апреля, в мае опять сработает 19 числа (30 дней в апреле), а в июне 20 т.к. в мае уже 31.doter.ua писал(а):
Ну вообще кол-во дней статичное, за исключением февраля в високосный год.
Я не говорил, что будет легко. Суть в том, что у каждого месяца статичное кол-во дней.nikomp писал(а):Народ, подскажите пожалуйста!
Код: Выделить всё
db.execSQL("CREATE TABLE "+DB_TABLE+"("+
COLUMN_ID+" integer primary key autoincrement, "+
COLUMN_NOTE+" text, "+
COLUMN_DATE+" text, "+
COLUMN_TIME+" text, "+
COLUMN_TYPE+" text, "+
COLUMN_EI+" text, "+
COLUMN_INTRVL+" integer"+");");
Никто ж не заставляет автоинкремент использовать, сделай без него и вставляй свои ИД.nikomp писал(а):нашел вот такую функцию last_insert_rowid(), но пока не разобрался как она работает
Возьмите текущую дату, в данном случае отфильруйте 23 число и в случае совпадения -работайте.nikomp писал(а):Добрый день!
Задаю будильник следующим образомпроблема в том, что не знаю как задать интервал срабатывания, например "каждый месяц" (например 23 числа каждого месяца), ведь в месяце может быть разное кол-во дней.Код: Выделить всё
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), Interval, pIntent);

Код: Выделить всё
am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, MyService.class);
intent.putExtra("myNote",note1);
intent.putExtra("myAlarmID", inidAlarm);
PendingIntent pIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
// Установим напоминание на след месяц
if (stEI.equals("месяц")==true) {
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pIntent);
}
Код: Выделить всё
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// открываем подключение к БД
db = new DB(this);
Log.d(LOG_TAG, "открыли подключение к БД");
btnAdd = (Button) findViewById(R.id.btnAdd);
btnAdd.setOnClickListener(this);
btnAll = (Button) findViewById(R.id.btnAll);
btnAll.setOnClickListener(this);
etNote = (EditText) findViewById(R.id.etNote);
etDate = (EditText) findViewById(R.id.etDate);
etTime = (EditText) findViewById(R.id.etTime);
// выведем напоминание
Intent intent = getIntent();
note1 = intent.getStringExtra(Note);
int inidAlarm = intent.getIntExtra("myAlarmID", 0);
Log.d(LOG_TAG, "ид будилы после срабатывания "+Integer.toString(inidAlarm));
if (inidAlarm!=0) {
db.open();
String stType=db.getType(inidAlarm);
String stEi=db.getEI(inidAlarm);
if ((stType.equals("Будильник с повтором")==true) && (stEi.equals("месяц")==true)) {
long Interval=db.getInterval(inidAlarm);
Log.d("myLogs","интервал ="+Long.toString(Interval));
// Продлим работу будильника на следующий интервал
Calendar cal1 = null;
try {
// преобразование строки в дату
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
String datestr = db.getDate(inidAlarm)+" "+db.getTime(inidAlarm);
Date date3 = dateFormat.parse(datestr);
cal1 = Calendar.getInstance();
cal1.setTime(date3);
} catch (ParseException ex) {
}
Calendar cal2 = null;
cal2 = Calendar.getInstance();
cal2.set(cal1.get(cal1.YEAR), cal1.get(cal1.MONTH)+(int)Interval, cal1.get(cal1.DAY_OF_MONTH), cal1.get(cal1.HOUR), cal1.get(cal1.MINUTE));
Log.d("myLogs", "Переставили будильник "+cal2);
long diff = cal2.getTimeInMillis() - cal1.getTimeInMillis();
Log.d("myLogs", "Переставили будильник на интервал "+Long.toString(diff));
am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent1 = new Intent(this, MyService.class);
Log.d(LOG_TAG, "напоминание "+note1+" "+Integer.toString(inidAlarm));
intent1.putExtra("myNote",note1);
intent1.putExtra("myAlarmID", inidAlarm);
PendingIntent pIntent1 = PendingIntent.getService(this, 0, intent1, PendingIntent.FLAG_CANCEL_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, diff, pIntent1);
Log.d("myLogs", "Переставили будильник");
}
etDate.setText(db.getDate(inidAlarm));
etTime.setText(db.getTime(inidAlarm));
db.close();
}
etNote.setText(note1);
// Настройки напоминания
sp = PreferenceManager.getDefaultSharedPreferences(this);
sp.edit().clear().commit();
}
Код: Выделить всё
Calendar cal = null;
try {
// преобразование строки в дату
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
String datestr = date+" "+time;
//Log.d(LOG_TAG, "дата_____ "+datestr);
//Date date3 = dateFormat.parse("26/01/2015 07:26");
Date date3 = dateFormat.parse(datestr);
//Log.d(LOG_TAG, "дата_____ "+date3);
cal = Calendar.getInstance();
cal.setTime(date3);
} catch (ParseException ex) {
}
Log.d(LOG_TAG, "получаем календарь "+cal);
// Устанавливаем будильник
am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, MyService.class);
Log.d(LOG_TAG, "напоминание "+note1);
intent.putExtra("myNote",note1);
intent.putExtra("myAlarmID", inidAlarm);
PendingIntent pIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
// Напоминание
Log.d(LOG_TAG, "тип "+stTypeNotif);
if (stTypeNotif.equals("Напоминание")) {
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pIntent);
}