通知未在正确的时间开火

时间:2013-10-14 17:43:50

标签: android android-notifications android-pendingintent

我正在为学校创建待办事项应用。当某人输入该项目的日期和时间时,该应用程序应创建一个在指定时间熄灭的通知。但是,当应用程序运行时,通知会在创建项目时发生,而不是指定的时间。附件是我的通知方法。

static final int uniqueid = 139868;
@SuppressLint("NewApi")
public void sendNotification(String title, String body){


    try{
        Log.i("LIST", "inside sendNotification");

        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        Intent intent = new Intent(this,ItemEditorActivity.class);

        PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
        //set notification for date set
        Notification n = new Notification.Builder(this)
                .setContentTitle(title)
                .setSmallIcon(R.drawable.ic_launcher)
                .setWhen(dateAndTime.getTimeInMillis())
                .setTicker(body)
                .addAction(R.drawable.ic_launcher, title, pi)
                .setDefaults(Notification.DEFAULT_ALL)
                .setAutoCancel(true)
                .build();
        Log.i("LIST", dateAndTime.toString());  
        Log.i("LIST", "notify");

        nm.notify(uniqueid, n);
    } catch (Exception e){
        e.printStackTrace();
    }
}

其中private Calendar dateAndTime=Calendar.getInstance();

3 个答案:

答案 0 :(得分:1)

通知“在指定时间停止”。当您发布Notification(即:致电NotificationManager.notify())时,会立即显示。从您的一条评论中,您似乎对when的{​​{1}}参数感到困惑。这只是一个将显示给用户的时间戳。它旨在用于向用户传达一些相关的时间戳(例如,如果通知是针对日历事件,则可能是日历事件的时间)。这不是通知发布的时间

要安排通知在指定时间启用,您需要使用Notification

答案 1 :(得分:0)

使用闹钟管理器

AlarmManager alarmManager = (AlarmManager) getApplicationContext()
                    .getSystemService(Context.ALARM_SERVICE);

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,pendingIntent);

INTERVAL_DAY将每天同时重复闹钟

编辑:这就是我的方式,在我的活动中,我使用警报管理器在用户时间设置待定意图,然后在广播接收器启动服务时该服务将启动通知

答案 2 :(得分:0)

我正在编辑我的答案,可能我确切地解决了你的问题。看,您使用的是唯一ID,可能这是您的待处理Intent的请求代码。因此,当您为每个待处理的意图使用相同的请求代码时,因此当您设置新的请求代码时,您的先前的警报/通知请求将被替换。这就是您最近的通知有效但前一个通知无效的原因。您必须使用不同的请求代码。这就是原因。

现在,尝试这种方式来显示警报和通知......当然,根据您的需要在以下代码中更改上下文和其他内容。它应该工作正常

String Noti_title = intent.getExtras().getString("title");
        String Noti_message = intent.getExtras().getString("notes");
        int Noti_Code = intent.getExtras().getInt("code");

        mManager = (NotificationManager) this.getApplicationContext().getSystemService(this.getApplicationContext().NOTIFICATION_SERVICE);

        Intent intent1 = new Intent(this.getApplicationContext(), MainActivity.class);

        Notification notification = new Notification(R.drawable.ic_launcher , Noti_title , System.currentTimeMillis());
        intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);

        PendingIntent pendingNotificationIntent = PendingIntent.getActivity(this.getApplicationContext(), 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        notification.setLatestEventInfo(this.getApplicationContext(),Noti_title , Noti_message , pendingNotificationIntent);
        notification.vibrate = new long[] { 100L, 100L, 200L, 500L };
        mManager.notify(Noti_Code , notification);
        try {
            Uri notification_uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification_uri);
            r.play();
        } catch (Exception e) {}