首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何设置特定星期几的重复通知?

如何设置特定星期几的重复通知?
EN

Stack Overflow用户
提问于 2016-02-06 21:08:24
回答 2查看 2.5K关注 0票数 1

我正在寻找在工作日设置通知。我已经在警告对话框中添加了一串天数来显示天数。

我想在日历中设置用户在警报对话框中选择的日期。而且,这应该在下周的同一天重复。

我已经设置了时间选择器对话框来选择通知的时间。但是如果我执行c.getTime(),我就会得到当前的日期和时间。

如何设置其他日期的通知?比如,如果今天是星期一,我想在wed上创建通知?如何在日历中设置wed?

代码语言:javascript
运行
复制
  c.set(Calendar.HOUR_OF_DAY, hour);
        c.set(Calendar.MINUTE, minute);
        c.set(Calendar.SECOND,0);
        c.set(Calendar.MILLISECOND,0);

        notification = c.getTime();
        notificationTime = df.format(notification);
        notifyTime.setText(notificationTime);
        Toast.makeText(getApplicationContext(),String.valueOf(notification),Toast.LENGTH_SHORT).show();

对于通知,我使用警报管理器。

代码语言:javascript
运行
复制
 private void setAlarm(Calendar targetmCalen) {

    Intent intent = new Intent(getBaseContext(),NotificationReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,targetmCalen.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY *7, pendingIntent);

    ComponentName receiver = new ComponentName(getApplicationContext(),NotificationReceiver.class);
    PackageManager pm = getApplicationContext().getPackageManager();

    pm.setComponentEnabledSetting(receiver,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);

    Toast.makeText(getApplicationContext(),"Notification Set",Toast.LENGTH_SHORT).show();
}

选择日期的警告对话框:

代码语言:javascript
运行
复制
  selectDay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final AlertDialog.Builder builder = new AlertDialog.Builder(AddEventActivity.this);

            builder.setSingleChoiceItems(R.array.day_array, -1,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int item) {

                            String[] day = getBaseContext().getResources().getStringArray(R.array.day_array);

                            selectDay.setText(day[item]);

                            dialog.dismiss();
                        }
                    });
            builder.show();
        }
    });

我必须在提醒对话框内的日历实例中设置星期几吗?喜欢

c.set(Calendar.DAY_OF_WEEK)?

编辑:

我试着这样做。但是,如果我多次选择一天,这可能会提前一天。

代码语言:javascript
运行
复制
 selectDay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final AlertDialog.Builder builder = new AlertDialog.Builder(AddEventActivity.this);

            builder.setSingleChoiceItems(R.array.day_array, -1,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int item) {

                            String[] day = getBaseContext().getResources().getStringArray(R.array.day_array);

                            selectDay.setText(day[item]);

                            dayOfWeek = day[item];

                            switch (dayOfWeek)
                            {
                                case  "Mon":
                                    c.set(Calendar.DAY_OF_WEEK,2);
                                    c.getTime();
                                    Toast.makeText(getApplicationContext(),String.valueOf(c.getTime()),Toast.LENGTH_SHORT).show();
                                    break;
                                case "Tue":

                                    c.set(Calendar.DAY_OF_WEEK, 3);
                                    c.getTime();
                                    Toast.makeText(getApplicationContext(),String.valueOf(c.getTime()),Toast.LENGTH_SHORT).show();
                                    break;
                                case "Wed":
                                    c.set(Calendar.DAY_OF_WEEK, 4);
                                    c.getTime();
                                    Toast.makeText(getApplicationContext(),String.valueOf(c.getTime()),Toast.LENGTH_SHORT).show();
                                    break;

                                case "Thu":
                                    c.set(Calendar.DAY_OF_WEEK, 5);
                                    c.getTime();
                                    Toast.makeText(getApplicationContext(),String.valueOf(c.getTime()),Toast.LENGTH_SHORT).show();
                                    break;

                                case "Fri":
                                    c.set(Calendar.DAY_OF_WEEK, 6);
                                    c.getTime();
                                    Toast.makeText(getApplicationContext(),String.valueOf(c.getTime()),Toast.LENGTH_SHORT).show();
                                    break;

                                case "Sat":
                                    c.set(Calendar.DAY_OF_WEEK, 7);
                                    c.getTime();
                                    Toast.makeText(getApplicationContext(),String.valueOf(c.getTime()),Toast.LENGTH_SHORT).show();
                                    break;

                                case "Sun":

                                    c.set(Calendar.DAY_OF_WEEK,1);
                                    c.getTime();
                                    Toast.makeText(getApplicationContext(),String.valueOf(c.getTime()),Toast.LENGTH_SHORT).show();
                            }

                            dialog.dismiss();
                        }
                    });
            builder.show();
        }
    });

请帮帮我..

EN

回答 2

Stack Overflow用户

发布于 2016-02-06 21:22:45

代码语言:javascript
运行
复制
public class TimerReceiver extends BroadcastReceiver {

public  void scheduleAlarms(Context paramContext) {

    Calendar calendar = Calendar.getInstance();

    if (strmyTime.contains("One Week")) {
        calendar.set(Calendar.DATE, 7);

        registerReceiver(paramContext, calendar, AlarmManager.INTERVAL_DAY * 7);
    }

}

public  void registerReceiver(Context paramContext, Calendar calender, long interval) {

    AlarmManager localAlarmManager = (AlarmManager) paramContext.getSystemService(Context.ALARM_SERVICE);
    PendingIntent localPendingIntent = PendingIntent.getService(paramContext, 0,
            new Intent(paramContext, NotificationService.class), PendingIntent.FLAG_UPDATE_CURRENT);

    localAlarmManager.setRepeating(AlarmManager.RTC, calender.getTimeInMillis(), interval, localPendingIntent);

}

@Override
public void onReceive(Context context, Intent intent) {


    scheduleAlarms(context);
    context.startService(new Intent(context, Notification.class));
        }

}

票数 0
EN

Stack Overflow用户

发布于 2019-05-02 15:16:56

我希望你已经解决了你的问题。尽管如此,我还是会发布我的解决方案。所以如果有人偶然发现。

代码语言:javascript
运行
复制
private void sendNotification(){
    Intent notificationIntent = new Intent(HomeActivity.this, NotificationReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
            NOTIFICATION_REQUEST_CODE,
            notificationIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, CONST.NOTIFICATION_TIME_HOUR);
    calendar.set(Calendar.MINUTE, 0);
    for (int i = 1; i < 8; ++i){
        if (i != 6){
            calendar.set(Calendar.DAY_OF_WEEK, i);
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), CONST.NOTIFICATION_INTERVAL, pendingIntent);
        }
    }
}

这里是long NOTIFICATION_INTERVAL = 7 * 24 * 60 * 60 * 1000; & int NOTIFICATION_TIME_HOUR = 9;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35241385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档