当前位置:编程学习 > wap >>

关于闹钟和notification的问题

我在做一个闹钟提醒的功能,目的是到预定的时间则发送一个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 --------------------编程问答-------------------- 没人吗?自己顶,在线等 --------------------编程问答-------------------- 怎么没人啊。。。自己再顶 --------------------编程问答--------------------

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

--------------------编程问答--------------------
引用 3 楼 comeoverjava 的回复:

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


不是这个意思,我的意思是,我设定的时间没问题,但是在点击设定的时候他会多通知一次。不明白这一次为什么会出来,求解决 --------------------编程问答--------------------
引用 4 楼 silentcolours 的回复:
Quote: 引用 3 楼 comeoverjava 的回复:


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


不是这个意思,我的意思是,我设定的时间没问题,但是在点击设定的时候他会多通知一次。不明白这一次为什么会出来,求解决


打印日志信息,会不会是你的for循环引起的 --------------------编程问答--------------------
引用 5 楼 comeoverjava 的回复:
Quote: 引用 4 楼 silentcolours 的回复:

Quote: 引用 3 楼 comeoverjava 的回复:


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


不是这个意思,我的意思是,我设定的时间没问题,但是在点击设定的时候他会多通知一次。不明白这一次为什么会出来,求解决


打印日志信息,会不会是你的for循环引起的

for循环只是为了设置多个闹钟用的每次传的pendingIntent是不同的 --------------------编程问答-------------------- 有人知道这是怎么回事,怎么解决吗??继续等! --------------------编程问答-------------------- 不要沉啊,没人知道么??
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,