Как я могу получить повтор будильника в будние дни с помощью диспетчера будильника в Android?
Привет, я новичок в Android, я разрабатываю приложение тревоги, для которого мне нужно повторно вызывать тревогу в течение одного и того же времени в разные дни, выбранные пользователем. Что я имею в виду, если я установлю время будильника на 10 утра и опцию повтора на воскресенье, понедельник, субботу, будильник будет срабатывать каждое воскресенье, понедельник, суббота.
Здесь я использую код для вызова будильника
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
Intent intent = new Intent(Alarm.this, OneShotAlarm.class); //here i am calling broad \cast receiver to invoke alarm
PendingIntent sender = PendingIntent.getBroadcast(Alarm.this, requestCode, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.set(Calender.HOUR_OF_DAY,10);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
Используя этот код, я вызываю сегодняшний день в 10 часов утра. Но моя цель - вызывать будильник на выбранные дни в 10 часов утра.
Здесь у меня есть еще один вопрос, пожалуйста, помогите для этого. Когда я пытаюсь установить прошедшее время, будильник будет активирован на текущее время. Как я могу дать прошедшее время. Я имею в виду, когда я в 11AP мне нужно дать 9 утра.
Пожалуйста, предложите мне, если есть какой-либо способ. Заранее спасибо.
3 ответа
Пожалуйста, напишите ниже код в вашем классе приемника вещания, это решит вашу проблему.
public class MyBroadcastReceiver extends BroadcastReceiver {
DBAdapter mDba;
SQLiteDatabase mDb;
Ringtone rt;
MediaPlayer mp;
AlertDialog.Builder alertbox;
Context ctx;
@Override
public void onReceive(Context context, Intent intent) {
DBHelper mDbh = new DBHelper(context, null, null, 1);
mDb = mDbh.getWritableDatabase();
mDb.setLockingEnabled(true);
mDba = new DBAdapter(context);
mDba.open();
Cursor cr = mDb.query("mReminderEntry", null, null, null, null,
null, null);
if (cr.equals(null)) {
System.out.println("No Data Found");
} else {
Date d = new Date();
System.out.println("Current Hour is:- " + d.getHours());
System.out.println("Current Minute is:- " + d.getMinutes());
Calendar calendar = Calendar.getInstance();
int day = calendar.get(Calendar.DAY_OF_WEEK);
String today = null;
if (day == 2) {
today = "Monday";
} else if (day == 3) {
today = "Tuesday";
} else if (day == 4) {
today = "Wednesday";
} else if (day == 5) {
today = "Thursday";
} else if (day == 6) {
today = "Friday";
} else if (day == 7) {
today = "Saturday";
} else if (day == 1) {
today = "Sunday";
}
System.out.println("Today is:- " + today);
int system_hour = d.getHours();
int system_minute = d.getMinutes();
cr.moveToFirst();
for (int i = 0; i < cr.getCount(); i++) {
if (cr.getString(3).equals(system_hour + ":" + system_minute)
&& cr.getString(1).equals("Daily")) {
System.out.println("Matched");
Intent scheduledIntent = new Intent(context, MyScheduledActivity.class);
scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(scheduledIntent);
break;
} else if (cr.getString(3).equals(
system_hour + ":" + system_minute)
&& cr.getString(1).equals(today)) {
Intent scheduledIntent = new Intent(context, MyScheduledActivity.class);
scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(scheduledIntent);
System.out.println("Matched");
break;
} else {
System.out.println("No Matching");
}
cr.moveToNext();
}
}
cr.close();
mDba.close();
}
}
Если у вас есть какие-либо вопросы, касающиеся этого, то скажите мне.
Дипак Кешария прав, и вам нужно иметь немного логики... одна логика может быть:
Используйте базу данных для хранения сигналов тревоги.
Сделать сервис, который получает самое последнее время из базы данных.
Зарегистрировать тревогу на этом
После срабатывания проверьте, повторяется ли сигнал тревоги.
если да, то обновите время будильника в дБ. т.е. теперь будильник будет отредактирован на следующий день повторения.
Перезапустите сервис
Теперь, если ваша логика в порядке, вам не нужно иметь ответ на второй вопрос, поскольку он вам не понадобится.
Вы можете реализовать свой повторяющийся сигнал тревоги следующим образом:
1: Сначала создайте базу данных и сохраните ваши тревоги.
2: Вместо того, чтобы использовать сервис, вы можете использовать Time tick reciever(Broad Cast Reciever), а в методе on приемника time tie reciever вы можете проверить текущее время и текущий день и сопоставить его с датой и временем будильника в базе данных.
3: если дата и время совпадают, вы можете включить будильник.