闹钟管理器触发通知

3
我有一个闹钟管理器,每个星期日会触发一个通知。它运行良好,但是每当我打开应用程序时,即使不是星期日,通知也会显示出来。当应用程序打开时,onReceive方法是否会被触发?我该如何更改它,以便在应用程序打开时不显示通知?
代码:
package com.sjjgames.abortionappnoads;

import java.util.Calendar;
import android.app.AlarmManager;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;
import android.widget.Toast;

    public class Alarm extends BroadcastReceiver
    {
         @Override
         public void onReceive(Context context, Intent intent) 
         {   
             PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
             PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
             wl.acquire();

                // Put here YOUR code.
                //NOTIFICATION
                NotificationCompat.Builder mBuilder =
                        new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.icon)
                        .setContentTitle("Fetal Development")
                        .setContentText("Click here to view you child's development for this week!");
                Intent resultIntent = new Intent(context, StatusOfChild.class);
                TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
                stackBuilder.addParentStack(StatusOfChild.class);
                stackBuilder.addNextIntent(resultIntent);
                PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
                mBuilder.setContentIntent(resultPendingIntent);
                NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
                mNotificationManager.notify(9011, mBuilder.build());

             wl.release();
         }

     public void SetAlarm(Context context)
     {
         AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
         Intent i = new Intent(context, Alarm.class);
         PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
         /*
         Calendar calendar = Calendar.getInstance();
         calendar.set(Calendar.DAY_OF_WEEK, 1);
         calendar.set(Calendar.HOUR_OF_DAY, 12);
         calendar.set(Calendar.MINUTE, 00);
         calendar.set(Calendar.SECOND, 00);
         */
        long day = 0;
        Calendar dayCalendar = Calendar.getInstance();
        long dayOfWeek = dayCalendar.get(Calendar.DAY_OF_WEEK);
        if (dayOfWeek == 1){ //Sunday
            day = System.currentTimeMillis();
        }
        if (dayOfWeek == 2){ //Monday
            day = 24*60*60*1000*2;
        }
        if (dayOfWeek == 3){ //Tuesday
            day = 24*60*60*1000*3;
        }
        if (dayOfWeek == 4){ //Wednesday
            day = 24*60*60*1000*4;
        }
        if (dayOfWeek == 5){ //Thursday
            day = 24*60*60*1000*5;
        }
        if (dayOfWeek == 6){ //Friday
            day = 24*60*60*1000*6;
        }
        if (dayOfWeek == 7){ //Saturday
            day = 24*60*60*1000;
        }
        am.setRepeating(AlarmManager.RTC_WAKEUP, day, 24*60*60*1000*7, pi);

     }

     public void CancelAlarm(Context context)
     {
         Intent intent = new Intent(context, Alarm.class);
         PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
         AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
         alarmManager.cancel(sender);
     }

 }
1个回答

2
这与setRepeating()在过去时立即触发闹钟有关。你需要计算时间差并安排闹钟。将其添加到日历似乎是一种简单的方法。
例如,如果你正在使用日历而当天是星期一:
Calendar calendar = Calendar.getInstance();
         calendar.set(Calendar.HOUR_OF_DAY, 12);
         calendar.set(Calendar.MINUTE, 00);
         calendar.set(Calendar.SECOND, 00);
         calendar.add (Calendar.DATE, 6); //add 6 days.

这个会起作用吗?如果不行,我该如何创建一个指向下一个星期日的日历?am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis()+(calendar.getTimeInMillis()-System.currentTimeMillis()), 24606010007, pi); - Shane
@Shane 时间差异是一件棘手的事情。我编辑了我的答案,因为有一种更简单的方法。我建议尝试一下日历方法,因为你所要做的只是玩弄日期。 - A--C
好的,我已经编辑了我的文章以包含我的更改,但我仍然面临着原始问题!我不明白为什么这段代码不起作用... - Shane
1
你需要添加,我非常确定24*60*60*1000*6作为日期已经过去了。因此,System.currentTimeMillis()+day应该更好用。 - A--C
非常感谢您的帮助!我觉得它终于正常工作了! - Shane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接