Тревога Android с уведомлением о любой дате, когда я меняю дату - PullRequest
1 голос
/ 07 декабря 2011

Я использую AlarmManager и NotificationManager с BroadcastReceiver. Когда я устанавливаю будильник с определенной датой, он срабатывает с первого раза. Однако, когда я изменяю дату и нажимаю кнопку подтверждения, будильник срабатывает в любую дату немедленно. Я хочу установить интервал будильника на следующий день после истекшей даты с фиксированным временем. В чем проблема с этим? Я не понимаю в данный момент.

confirmButton.setOnClickListener(new View.OnClickListener() 
{
    public void onClick(View v) {
    //set alarm with expiration date                
    am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    setOneTimeAlarm();
    Toast.makeText(fridgeDetails.this, "Alarm automatic set", 
        Toast.LENGTH_SHORT).show();
    setResult(RESULT_OK);
    finish();
}

public void setOneTimeAlarm() {
    c.set(Calendar.HOUR_OF_DAY, 14);
    c.set(Calendar.MINUTE, 49);
    c.set(expiredYear, expiredMonth, expiredDay);
    Intent myIntent = new Intent(fridgeDetails.this, AlarmService.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
        fridgeDetails.this, 0, myIntent, PendingIntent.FLAG_ONE_SHOT);
    am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),
        AlarmManager.INTERVAL_DAY, pendingIntent);
}
}); 

AlarmService.java

public class AlarmService extends BroadcastReceiver{
    NotificationManager nm;
    @Override
    public void onReceive(Context context, Intent intent) {
        nm = (NotificationManager) context.getSystemService(
            Context.NOTIFICATION_SERVICE);
        CharSequence from = "Check your fridge";
        CharSequence message = "It's time to eat!";
        PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
            new Intent(), 0);
        Notification notif = new Notification(R.drawable.ic_launcher,
            "Keep Fridge", System.currentTimeMillis());
        notif.setLatestEventInfo(context, from, message, contentIntent);
        notif.defaults |= Notification.DEFAULT_SOUND; 
        notif.flags |= Notification.FLAG_AUTO_CANCEL; 
        nm.notify(1, notif);
    }   
}

1 Ответ

2 голосов
/ 07 декабря 2011

Вам необходимо установить свойство вместо FLAG_ONE_SHOT. Это для отдельного события тревоги, а не для повторения. попробуйте это

PendingIntent pendingIntent = PendingIntent.getBroadcast(
        fridgeDetails.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

см. Подробнее о здесь

Edit:

Как вы делаете для уведомления с PendingIntent

PendingIntent contentIntent = PendingIntent.getActivity(context, 0,new Intent(), 0);

В этом случае вы передаете пустой объект Intent, в котором вам нужно указать имя класса для этого, когда вы нажимаете на уведомление о том, какое действие будет запущено, как во время установки будильника, которое вы делаете

Intent myIntent = new Intent(fridgeDetails.this, AlarmService.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
        fridgeDetails.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

теперь просто передайте имя «Активность» в намерении, например, предположим, что вы хотите запустить свое домашнее действие, и имя активности, например «homeactivity»

PendingIntent contentIntent = PendingIntent.getActivity(context, 0,new Intent(context,HomeActivity.class), 0);
...