【问题标题】:Set both Date and Time for AlarmManager in Android Studio在 Android Studio 中为 AlarmManager 设置日期和时间
【发布时间】:2020-08-11 11:19:33
【问题描述】:

我想为警报管理器设置特定的日期和时间来触发通知。我找到了一个有用的代码,可以同时显示日期片段和时间片段。我的问题是当我设置警报时,通知没有在指定的日期和时间弹出,而是立即弹出。请各位前辈帮帮我。

这是我的代码。

对于开放时间选择器

mOpenTimePicker.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Calendar date;
            final Calendar currentDate = Calendar.getInstance();
            date = Calendar.getInstance();
            new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                    date.set(year, monthOfYear, dayOfMonth);
                    new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
                        @Override
                        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                            date.set(Calendar.HOUR_OF_DAY, hourOfDay);
                            date.set(Calendar.MINUTE, minute);
                            Log.v(TAG, "The choosen one " + date.getTime());

                        }
                    }, currentDate.get(Calendar.HOUR_OF_DAY), currentDate.get(Calendar.MINUTE), false).show();
                }
            }, currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DATE)).show();
            DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
            mTextView.setText(dateFormat.format(date.getTime()));
            startAlarm(date);
        }


    });

用于启动警报

 private void startAlarm(Calendar c) {
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        //Passing data
        String title = mTitle.getText().toString();
        String message = mMessage.getText().toString();

        id = (int) System.currentTimeMillis();
        Intent intent = new Intent(this, AlertReceiver.class);
        intent.putExtra("Title", title);
        intent.putExtra("Message", message);
        intent.putExtra("ID", id);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id, intent, 0);
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);

    } 

【问题讨论】:

    标签: java android


    【解决方案1】:

    您在onClick(View v) 中设置警报的代码将立即调用,因为它是同步写入的。可以通过以下方式解决:-

    mOpenTimePicker.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Calendar date;
                final Calendar currentDate = Calendar.getInstance();
                date = Calendar.getInstance();
                new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                        date.set(year, monthOfYear, dayOfMonth);
                        new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
                            @Override
                            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                                date.set(Calendar.HOUR_OF_DAY, hourOfDay);
                                date.set(Calendar.MINUTE, minute);
                                // Set the alarm here
                                DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
                                mTextView.setText(dateFormat.format(date.getTime()));
                                startAlarm(date);
                            }
                        }, currentDate.get(Calendar.HOUR_OF_DAY), currentDate.get(Calendar.MINUTE), false).show();
                    }
                }, currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DATE)).show();
            }
        });
    

    这段代码有点乱所以可能创建一个单独的方法来打开TimePickerDatePicker

    【讨论】:

    • 感谢您的解决方案兄弟。它确实解决了我的问题。也感谢您的建议@ADM。
    • @ADM.Done 兄弟。抱歉迟到了。我不知道如何接受答案。这就是原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2021-04-03
    • 1970-01-01
    相关资源
    最近更新 更多