0

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

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

4

3 回答 3

1

通知不会“在指定时间发出”。当您发布Notification(即: call NotificationManager.notify())时,它会立即出现。从您的一条评论看来,您似乎对 的when参数感到困惑Notification。这只是将显示给用户的时间戳。它旨在让您向用户传达一些相关的时间戳(例如,如果通知是针对日历事件的,则它可能是日历事件的时间)。这不是通知会响起的时间

要安排通知在指定时间发出,您需要使用AlarmManager.

于 2013-10-16T17:03:38.263 回答
0

使用报警管理器

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

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

INTERVAL_DAY 将在每天的同一时间重复闹钟

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

于 2013-10-14T17:51:42.693 回答
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) {}
于 2013-10-14T17:53:37.537 回答