Как я могу получить повтор будильника в будние дни с помощью диспетчера будильника в Android? - PullRequest
3 голосов
/ 09 сентября 2011

Привет, я новичок в 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 ]

7 голосов
/ 09 сентября 2011

Пожалуйста, напишите ниже код в вашем классе приемника вещания, это решит вашу проблему.

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 голос
/ 09 сентября 2011

Дипак Кешария прав, и вам нужно немного логики ... одна логика может быть:

  • Использование базы данных для хранения сигналов тревоги.

  • Создание службы, которая получает самое последнее время из базы данных.

  • Зарегистрировать тревогу на этом

  • После срабатывания проверьте, повторяется ли сигнал тревоги

  • если да, то обновить время будильника в дБ. то есть, теперь будильник будет отредактирован для следующего повторного дня.

  • Перезапустить услугу

Теперь, если ваша логика в порядке, вам не нужно иметь ответ на второй вопрос, поскольку он вам не понадобится.

0 голосов
/ 09 сентября 2011

Вы можете реализовать свой повторяющийся сигнал тревоги следующим образом:

1: сначала создайте базу данных и сохраните ваши тревоги.

2: Вместо того, чтобы использовать службу, вы можете использовать Time tie recieverCast Reciever), а в методе on-recive приемника отметки времени вы можете проверить текущее время и текущий день и сопоставить его с датой и временем будильника в базе данных.

3: если дата и время совпадаютВы можете активировать будильник.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...