闹钟已成功设置为未来时间,但不适用于日历日期

时间:2017-07-29 09:14:22

标签: java android notifications calendar alarmmanager

我有这个应用程序,我想在用户定义的特定日期设置通知。我在这里看到了很多代码和相关答案但是由于某种原因到目前为止没有任何作用。

在这个测试项目中,我有两种方法。一个设置闹钟在未来响铃5秒和一个分配所需日期的闹钟。

问题:

如果我将闹钟设置为第二次延迟,则可以正常工作。警报分配后5秒内会显示通知。 但是如果我使用传递Calendar日期的方法,它什么都不做。不会触发通知

MainActivity.java

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void setAlarmOnClick(View view){
        // this method call works fine
        setAlarm(getNotification("Date test"), 3000);
        // this one doesn't
        // setAlarm(getNotification("Date test"), getDate());
    }

    // Here nothing happens when the date comes
    private void setAlarm(Notification notification, Calendar cal) {

        Intent notificationIntent = new Intent(this, NotificationPublisher.class);
        notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID, 1);
        notificationIntent.putExtra(NotificationPublisher.NOTIFICATION, notification);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA);

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),pendingIntent );
        Toast.makeText(this, "Alarm worked.", Toast.LENGTH_LONG).show();
    }

    // This alarm get successfully trigger here showing the notification
    private void setAlarm(Notification notification, int delay) {

        Intent notificationIntent = new Intent(this, NotificationPublisher.class);
        notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID, 1);
        notificationIntent.putExtra(NotificationPublisher.NOTIFICATION, notification);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA);

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        alarmManager.set(AlarmManager.RTC_WAKEUP, delay, pendingIntent );
        Toast.makeText(this, "Alarm worked.", Toast.LENGTH_LONG).show();
    }

    private Calendar getDate(){
        Calendar cal=Calendar.getInstance();
        cal.set(Calendar.MONTH,8);
        cal.set(Calendar.YEAR,2017);
        cal.set(Calendar.DAY_OF_MONTH,29);
        cal.set(Calendar.HOUR_OF_DAY,11);
        cal.set(Calendar.MINUTE,47);
        return cal;
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    private Notification getNotification(String content) {
        Notification.Builder builder = new Notification.Builder(this);
        builder.setContentTitle("Scheduled Notification");
        builder.setContentText(content);
        builder.setSmallIcon(R.mipmap.ic_launcher);
        return builder.build();
    }
}

NotificationPublisher.java

public class NotificationPublisher extends BroadcastReceiver {
    public static String NOTIFICATION_ID = "notification-id";
    public static String NOTIFICATION = "notification";

    public void onReceive(Context context, Intent intent) {

        Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();
        int id = intent.getIntExtra(NOTIFICATION_ID, 0);
        NotificationManager notofManager = (NotificationManager)context. getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = intent.getParcelableExtra(NOTIFICATION);
        notofManager.notify(id, notification);

    }
}

我真的很感激任何帮助!

P.S。

如何确保在日期成功设置闹钟。即使代码有效,日期也会在一周内设置。我如何测试它会触发呢?显然我们不能等待一周才能看到。更改设备日期是否有效?谢谢

1 个答案:

答案 0 :(得分:0)

您假设日历月份从0到11而不是1-12。 如下所示:

cal.set(Calendar.Month, 7 ); 

会将您的日历月设置为8月。

相关问题