Как реализовать будильник на Android, который отключается действием на другом экране?

Я пытаюсь создать будильник Android, который отключится, когда действие будет завершено на другом экране (т.е. пользователь вводит ответ в математическую задачу).

Как я:

  1. разрешить пользователю устанавливать ежедневный будильник на экране с помощью таймера
  2. реализовать эту сигнализацию
  3. разрешить пользователю отключать будильник, решая математическую задачу (или любое другое действие) на другом экране

Я попытался следовать этому примеру с предложенным решением: Невозможно установить время будильника в Android< /а>

но не играет рингтон. Я добавил это прямо под строкой

Toast.makeText(BrainBuzzActivity.this, "Alarm has been set.", Toast.LENGTH_LONG).show();

Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
if(alert == null){
     // alert is null, using backup
     alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
     if(alert == null){
        // alert backup is null, using 2nd backup
        alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);               
     }
}

ОРИГИНАЛ Главная страница (создание намерения)

    public class BrainBuzzActivity extends Activity 
    {
        private Button alarm = null;
        private AlarmManager alarmManager = null;
        Calendar cal = Calendar.getInstance();
        static final int DIALOG_TIME = 0;


alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarm = (Button) findViewById(R.id.alarm);
    alarm.setOnClickListener(new View.OnClickListener() {         
        public void onClick(View v) {
            showDialog(DIALOG_TIME);
        }
    });
}

    protected Dialog onCreateDialog(int id) {
    Dialog dialog = null;
    switch(id){
    case DIALOG_TIME:
        dialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {

            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                Calendar c = Calendar.getInstance();
                c.setTimeInMillis(System.currentTimeMillis());
                // c.clear();
                //c.set(Calendar.YEAR, 2011);
                //c.set(Calendar.MONTH, 6);
                //c.set(Calendar.DAY_OF_MONTH, 4);
                c.set(Calendar.HOUR_OF_DAY, hourOfDay);
                c.set(Calendar.MINUTE, minute);
                c.set(Calendar.SECOND, 0);
                //c.set(Calendar.MILLISECOND, 0);
                Intent intent = new Intent(BrainBuzzActivity.this,AlarmReceiver.class);
                PendingIntent pi = PendingIntent.getBroadcast(BrainBuzzActivity.this, 0, intent, 0);
                alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pi);
                Toast.makeText(BrainBuzzActivity.this, "Alarm has been set.", Toast.LENGTH_LONG).show();

                Intent i = new Intent(BrainBuzzActivity.this, CloudCapture.class);
                startActivity(i);
            }
        },cal.get(Calendar.HOUR_OF_DAY),cal.get(Calendar.MINUTE),false);
        break;
    }
    return dialog;
}

person ellothere    schedule 06.12.2011    source источник


Ответы (1)


Когда вы создаете будильник, вы используете метод AlarmManager

setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)

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

Чтобы отменить будильник, вы должны создать PendingIntent того же типа, который определен в документация как

та же операция, то же намерение, данные, категории и компоненты, и те же флаги

а затем использовать

cancel(PendingIntent operation)

person skynet    schedule 06.12.2011
comment
Привет, поэтому в моей основной деятельности PendingIntent определяется как PendingIntent pi = PendingIntent.getBroadcast(MainPage.this, 0, намерение, 0); Как отменить в другом классе? Я пробовал PendingIntent pi = PendingIntent.getBroadcast(MainPage.this, 0, намерение, 0); отменить (пи); Извините, что был n00by... - person ellothere; 06.12.2011
comment
Как вы создаете intent? Отредактируйте исходный вопрос с этим кодом - person skynet; 06.12.2011