Как да внедрим аларма на 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, intent, 0); Как да се откажа в другия клас? Опитах PendingIntent pi = PendingIntent.getBroadcast(MainPage.this, 0, intent, 0); анулиране (пи); Съжалявам, че бях n00by... - person ellothere; 06.12.2011
comment
Как създавате intent? Редактирайте оригиналния си въпрос с този код - person skynet; 06.12.2011