当我更改日期时,Android 闹钟会在任何日期运行通知

标签 android alarmmanager notificationmanager

我将 AlarmManagerNotificationManagerBroadcastReceiver 一起使用。 当我设置一个特定日期的闹钟时,它是第一次工作。但是,当我修改日期并单击确认按钮时,警报在任何日期都有效 立即地。我想在固定时间过期后的第二天设置警报间隔。 它有什么问题?我暂时不明白。

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

报警服务.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);
    }   
}

最佳答案

您需要设置属性而不是 FLAG_ONE_SHOT。这是针对单个警报事件,而不是针对重复事件。试试这个

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

here 查看更多详细信息

编辑:

正如您对 PendingIntent 的通知所做的那样

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

在这里你传递了 Intent 的空对象你需要传递类名当你点击通知时将启动哪个 Activity 就像你做的警报设置时间一样

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

现在只需在 Intent 中传递 Acitivity 名称,例如假设您想启动您的家庭 Activity 和 Activity 名称,例如“homeactivity”

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

关于当我更改日期时,Android 闹钟会在任何日期运行通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8413604/

相关文章:

Android 通知管理器在屏幕关闭时不起作用

android - 意向服务及其优势

android - 在 '-keepclass' proguard android上缺少EOF

android - sendWakefulWork 并不总是用 cwac-wakeful-1.1.0 调用

android - 如何检测 NotificationManager 发送的通知的发送者/检测点击了通知栏上的哪个通知?

java - Fragment 中的通知管理器

android - 如何在android EditText中强制使用英文键盘

php - Firebase token 验证

android - 即使在打瞌睡模式下也每 15 秒获取一次位置

android - 为什么闹钟不播放闹钟(声音)?