簡體   English   中英

在 Android 中為事件的開始日期和結束日期設置特定時間的警報

[英]Setting Alarm for Particular Timings with Respect to Start Date and End Date of an Event in Android

我有一個日歷事件,開始日期為(24 小時格式)27-Apr-2016 11:00:00,結束日期為 29-Apr-2016 11:00:00 我有三個定時10點45分00秒,10點30分零零秒10點15分○○秒其早期到實際設定的定時(即15分鍾,30分鍾和45分鍾之前警告事件的開始日期計算)。

此外,警報必須每天重復相同的先前時間,直到達到結束日期。

這是我嘗試這樣做的方法,下面的代碼如何不調用警報也不每天重復

MainActivity.java 中

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(this, Broadcast.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, PendingIntent.FLAG_UPDATE_CURRENT);

Calendar calendar = Calendar.getInstance();
calendar.set(2016,03,27,11,00,00);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis()-(60000*15), pendingIntent); // subtract for 15 mins prior alarm time
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis()-(60000*30), pendingIntent); // subtract for 30 mins prior alarm time
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis()-(60000*45), pendingIntent); // subtract for 45 mins prior alarm time

Broadcast.java 中

Log.i("Alarm", "Alarm Manager is called");
Toast.makeText(context, new Date().toString(), Toast.LENGTH_SHORT).show();

我怎樣才能做到這一點? 請幫忙

這是我的示例代碼,試試這個:

在下面的代碼中根據需要修改日期和時間。

 public static int REPEAT_NOTIFICATION1 = 201;
    public static int REPEAT_NOTIFICATION2 = 202;
    public static int REPEAT_NOTIFICATION3 = 203;

     private void repeatNotification() {
        final DateTime dateTime1 = DateTime.now();
        dateTime1.hourOfDay().setCopy(7);
        dateTime1.minuteOfHour().setCopy(30);
        dateTime1.secondOfMinute().setCopy(00);
        final Calendar calendarNotifiedTime1 = Calendar.getInstance();
        calendarNotifiedTime1.set(Calendar.HOUR, dateTime1.getHourOfDay());
        calendarNotifiedTime1.set(Calendar.MINUTE, dateTime1.getMinuteOfHour());
        calendarNotifiedTime1.set(Calendar.SECOND, dateTime1.getSecondOfMinute());
        calendarNotifiedTime1.set(Calendar.AM_PM, Calendar.AM);

        final DateTime dateTime2 = DateTime.now();
        dateTime2.hourOfDay().setCopy(12);
        dateTime2.minuteOfHour().setCopy(30);
        dateTime2.secondOfMinute().setCopy(00);
        final Calendar calendarNotifiedTime2 = Calendar.getInstance();
        calendarNotifiedTime2.set(Calendar.HOUR, dateTime2.getHourOfDay());
        calendarNotifiedTime2.set(Calendar.MINUTE, dateTime2.getMinuteOfHour());
        calendarNotifiedTime2.set(Calendar.SECOND, dateTime2.getSecondOfMinute());
        calendarNotifiedTime2.set(Calendar.AM_PM, Calendar.PM);

        final DateTime dateTime3 = DateTime.now();
        dateTime3.hourOfDay().setCopy(6);
        dateTime3.minuteOfHour().setCopy(30);
        dateTime3.secondOfMinute().setCopy(00);
        final Calendar calendarNotifiedTime3 = Calendar.getInstance();
        calendarNotifiedTime3.set(Calendar.HOUR, dateTime3.getHourOfDay());
        calendarNotifiedTime3.set(Calendar.MINUTE, dateTime3.getMinuteOfHour());
        calendarNotifiedTime3.set(Calendar.SECOND, dateTime3.getSecondOfMinute());
        calendarNotifiedTime3.set(Calendar.AM_PM, Calendar.PM);


        Intent intent1 = new Intent(EmptyActivity.this, NotificationReceiver.class);
        intent1.putExtra(NotificationReceiver.NOTIFICATION_MESSAGE, "Repeat " + dateTime1.getHourOfDay() + ":" + dateTime1.getMinuteOfHour() + ":" + dateTime1.getSecondOfMinute());
        Intent intent2 = new Intent(EmptyActivity.this, NotificationReceiver.class);
        intent2.putExtra(NotificationReceiver.NOTIFICATION_MESSAGE, "Repeat " + dateTime2.getHourOfDay() + ":" + dateTime2.getMinuteOfHour() + ":" + dateTime2.getSecondOfMinute());
        Intent intent3 = new Intent(EmptyActivity.this, NotificationReceiver.class);
        intent3.putExtra(NotificationReceiver.NOTIFICATION_MESSAGE, "Repeat " + dateTime3.getHourOfDay() + ":" + dateTime3.getMinuteOfHour() + ":" + dateTime3.getSecondOfMinute());
        PendingIntent pendingIntent1 = PendingIntent.getBroadcast(EmptyActivity.this, REPEAT_NOTIFICATION1, intent3, PendingIntent.FLAG_UPDATE_CURRENT);
        PendingIntent pendingIntent2 = PendingIntent.getBroadcast(EmptyActivity.this, REPEAT_NOTIFICATION2, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
        PendingIntent pendingIntent3 = PendingIntent.getBroadcast(EmptyActivity.this, REPEAT_NOTIFICATION3, intent3, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager alarmManager = (AlarmManager) this.getSystemService(ALARM_SERVICE);


                cancelNotification(REPEAT_NOTIFICATION1);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendarNotifiedTime1.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent1);
                cancelNotification(REPEAT_NOTIFICATION2);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendarNotifiedTime2.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent2);
                cancelNotification(REPEAT_NOTIFICATION3);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendarNotifiedTime3.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent3);
    }

取消通知:

 public void cancelNotification(int requestCode) {
            try {
                Intent notificationIntent = new Intent(getApplicationContext(), NotificationReceiver.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
                AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
                alarmManager.cancel(pendingIntent);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

廣播接收器:

   public class NotificationReceiver extends BroadcastReceiver {
    public static String NOTIFICATION_MESSAGE = "notificationMessage";
    public static int REPEAT_NOTIFICATION1 = 201;
    public static int REPEAT_NOTIFICATION2 = 202;
    public static int REPEAT_NOTIFICATION3 = 203;

    Context context;

    @Override
    public void onReceive(Context context, Intent intent) {

        this.context = context;

        //Assume StartDate = yesterday.
        DateTime startDate = DateTime.now().minusDays(1);
        //Assume EndDate = tomorrow
        DateTime endDate = startDate.plusDays(2);

        DateTime today = DateTime.now();

        if (today.isBefore(endDate) || today.isEqual(endDate)) {

            String message = intent.getStringExtra(NOTIFICATION_MESSAGE);
            NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            //Define sound URI
            Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

            Intent notificationIntent = new Intent(context, EmptyActivity.class);
            notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
            final DateTime dateTime = DateTime.now();
            int color = 0xffffaa00;
//        int color1 = context.getColor(R.color.notificatinBackgroundColor);
            NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
            builder.setSmallIcon(R.drawable.festi_push_message_small);
            builder.setContentIntent(pendingIntent);
            builder.setContentTitle("Notification Sample");
            builder.setAutoCancel(true);
            builder.setContentText(message + ", Current Time : " + dateTime.getHourOfDay() + ":" + dateTime.getMinuteOfHour() + ":" + dateTime.getSecondOfMinute());
            builder.setSound(soundUri);
            builder.setLights(Color.RED, 1000, 1000);
            builder.setColor(color);

            Notification notification = builder.build();

            notification.flags |= Notification.FLAG_AUTO_CANCEL;

            notificationManager.notify(102938, notification);
        } else {
            cancelNotification(REPEAT_NOTIFICATION1);
            cancelNotification(REPEAT_NOTIFICATION2);
            cancelNotification(REPEAT_NOTIFICATION3);
        }
    }

    public void cancelNotification(int requestCode) {
        try {
            Intent notificationIntent = new Intent(context, NotificationReceiver.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
            AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            alarmManager.cancel(pendingIntent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

清單文件

  <receiver android:name=".NotificationReceiver" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM