我在做一个闹钟提醒的功能,目的是到预定的时间则发送一个notification通知。部分代码如下:            protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
                Button button_setyes = (Button) findViewById(R.id.setyes);
button_setyes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
setInfo();
}
});
            }             //设置提醒
            private void setInfo(){
DBOpenHelper dbOpenHelper = new DBOpenHelper(MainActivity.this);
List<User> users = dbOpenHelper.select();
for (int i = 0; i < users.size(); i++) {
int hour = 0;
int minite = 0;
int day = 0;

User user=(User)users.get(i);
int starttime = user.getStarttime();
String coursename = user.getCoursename();
String classroom = user.getClassroom();
String coursedate = user.getCoursedate();

String info = "下一节课是在 " + classroom + " 的 " + coursename;

switch (starttime){
case 1:hour = 7;minite = 50;break;
case 2:hour = 8;minite = 45;break;
case 3:hour = 9;minite = 50;break;
case 4:hour = 10;minite = 45;break;
case 5:hour = 12;minite = 0;break;
case 6:hour = 12;minite = 55;break;
case 7:hour = 14;minite = 0;break;
case 8:hour = 14;minite = 55;break;
case 9:hour = 15;minite = 50;break;
case 10:hour = 16;minite = 45;break;
case 11:hour = 17;minite = 50;break;
}

Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());

day = time.getFirstDayOfWeek();
if(coursedate.equals("一")){day = day + 0;}
if(coursedate.equals("二")){day = day + 1;}
if(coursedate.equals("三")){day = day + 2;}
if(coursedate.equals("四")){day = day + 3;}
if(coursedate.equals("五")){day = day + 4;}
if(coursedate.equals("六")){day = day + 5;}
if(coursedate.equals("日")){day = day + 6;}

time.set(Calendar.HOUR_OF_DAY, hour);
time.set(Calendar.MINUTE, minite);
time.set(Calendar.SECOND, 0);
time.set(Calendar.DAY_OF_MONTH, day);

Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
intent.setAction(info);
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
                PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, i,                          intent, PendingIntent.FLAG_CANCEL_CURRENT);
                am.setRepeating(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), 1000*60*60*24*7, pi);
}
}public class AlarmReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
NotificationManager notificationmanager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
int icon = R.drawable.stat_notify_chat;
String tickerText = intent.getAction();
String title = "距离上课还有10分钟";

Intent notificationIntent = new Intent(context, this.getClass());
                notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
notificationIntent, 0);
Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());
    notification.defaults = Notification.DEFAULT_ALL;
notification.flags|=Notification.FLAG_AUTO_CANCEL;
notification.setLatestEventInfo(context, title, tickerText, contentIntent);
notificationmanager.notify(1, notification);
}

}现在遇到的问题是,每当点击这个按钮使用设置闹钟的这个方法的时候,设定的三个闹钟都会立即触发发送出三个通知。但是之后到了预定的时间也能够成功地发送通知提醒,想要在设定闹钟的时候不立即传通知应该怎么做,问题出在哪?请各位帮忙看下!broadcastreceiver

解决方案 »

  1.   


    if(alarm == null){
    Intent intent = new Intent();
    intent.setAction("reconnect");
    sender= PendingIntent.getBroadcast(service, 1, intent, 0);
        
        //设定一个t秒后的时间
        Calendar calendar=Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.SECOND, t);
        
       alarm=(AlarmManager)service.getSystemService(Context.ALARM_SERVICE);
        alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
    }
      

  2.   

    不是这个意思,我的意思是,我设定的时间没问题,但是在点击设定的时候他会多通知一次。不明白这一次为什么会出来,求解决打印日志信息,会不会是你的for循环引起的
      

  3.   

    不是这个意思,我的意思是,我设定的时间没问题,但是在点击设定的时候他会多通知一次。不明白这一次为什么会出来,求解决打印日志信息,会不会是你的for循环引起的
    for循环只是为了设置多个闹钟用的每次传的pendingIntent是不同的