Hoe een alarm op Android implementeren dat wordt uitgeschakeld via een actie op een ander scherm?

Ik probeer een Android-alarm te maken dat wordt uitgeschakeld wanneer een actie wordt voltooid op een ander scherm (dus een gebruiker typt een antwoord in een wiskundeprobleem).

Hoe doe ik:

  1. laat gebruiker zijn dagelijks alarm op het scherm instellen met timepicker
  2. implementeer dat alarm
  3. staat gebruiker toe om het alarm uit te zetten door het wiskundeprobleem (of om het even welk andere actie) op een ander scherm

Ik heb geprobeerd dit voorbeeld te volgen met de voorgestelde oplossing: Kan de alarmtijd niet instellen in Android

maar het speelt geen beltoon. Ik heb dit recht onder de regel toegevoegd

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);               
     }
}

ORIGINELE hoofdpagina (creatie van intentie)

    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;
}
1

1 antwoord

Wanneer u een alarm maakt, gebruikt u de methode AlarmManager

setInexactRepeating (int type, lange triggerAtTime, lange interval, PendingIntent-bewerking)

zodat u het verschil kunt berekenen tussen nu en wanneer u wilt dat het afgaat en geef dan de lengte op tot elk volgend alarm.

Om een ​​alarm te annuleren, moet je een PendingIntent maken van dezelfde type , die is gedefinieerd in de documentatie als

dezelfde bewerking, dezelfde Intent-actie, gegevens, categorieën en componenten en dezelfde vlaggen

en gebruik dan

cancel (PendingIntent-bewerking)

0
toegevoegd
Hoe maak je de intentie aan? Bewerk uw oorspronkelijke vraag met die code
toegevoegd de auteur Craigy, de bron
Hallo, dus in mijn hoofdactiviteit wordt de PendingIntent gedefinieerd als PendingIntent pi = PendingIntent.getBroadcast (MainPage.this, 0, intent, 0); Hoe annuleer ik in de andere klas? Ik probeerde PendingIntent pi = PendingIntent.getBroadcast (MainPage.this, 0, intent, 0); annuleren (pi); Sorry dat ik n00by ben ...
toegevoegd de auteur ellothere, de bron
Bedankt voor de snelle reactie! De code is gepost.
toegevoegd de auteur ellothere, de bron