【问题标题】:Android - how to set an alarm to a specific dateAndroid - 如何将闹钟设置为特定日期
【发布时间】:2011-06-09 16:11:01
【问题描述】:

我已经看过很多教程并尝试了 2 个小时,但仍然有问题。我现在很紧张 :) 我想设置闹钟,例如到16:25就出发了,但什么也没有发生。我有这个代码:

   Calendar cur_cal = new GregorianCalendar();
    cur_cal.setTimeInMillis(System.currentTimeMillis());

    Calendar cal = new GregorianCalendar();
    cal.add(Calendar.DAY_OF_YEAR, cur_cal.get(Calendar.DAY_OF_YEAR));
    cal.set(Calendar.HOUR_OF_DAY, 16);
    cal.set(Calendar.MINUTE, 25);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);

    alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);

我也试过这个:

 cal.set(Calendar.AM_PM, cur_cal.get(Calendar.AM_PM));
    cal.set(Calendar.HOUR, 4);

我的最终目标是让它成为一个重复的警报,例如它应该每天在设定的时间关闭。

更新 01.17.2011。还是行不通。我有这个代码:

           Calendar cal = Calendar.getInstance();
            cal.set(Calendar.YEAR, 2011);
            cal.set(Calendar.MONTH, Calendar.JANUARY); 
            cal.set(Calendar.DAY_OF_MONTH, 17);
            cal.set(Calendar.HOUR_OF_DAY, 16);
            cal.set(Calendar.MINUTE, 58);
         cal.set(Calendar.SECOND, 0);
          cal.set(Calendar.MILLISECOND, 0);

我也试过这个:

 cal.set(Calendar.HOUR, 4);
 cal.set(Calendar.AM_PM, Calendar.PM);

还有这个:

cal.set(Calendar.HOUR_OF_DAY, 4 );
            cal.set(Calendar.AM_PM, Calendar.PM);

【问题讨论】:

    标签: android calendar alarm


    【解决方案1】:

    通常你不应该像你一样获得Calendar,有Calendar.getInstance()方法:

    Calendar cal = Calendar.getInstance();
    

    这为您提供了一个所有字段都设置为当前日期的日历,然后只需:

    cal.set(Calendar.HOUR_OF_DAY, 16);
    cal.set(Calendar.MINUTE, 25);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    
    alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
    

    【讨论】:

    • 谢谢,它现在可以工作了。但是,如果我设置 cal.set(Calendar.YEAR, 2011); 为什么它不起作用? cal.set(Calendar.MONTH, 1); cal.set(Calendar.DAY_OF_MONTH, 16); ?
    • @erdomester 使用 cal.set(Calendar.MONTH, Calendar.JANUARY) .. 我猜是 '1' 状态。
    • 我不明白所提供的答案如何使您的代码工作。当我安排闹钟时,它在今天非常有效,但是当我添加 YEAR 和 MONTH 的那一刻,它就停止工作了....
    【解决方案2】:
    package your.pack.name;
    
    import java.util.Calendar;
    
    import android.app.Activity;
    import android.app.AlarmManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    
    public class AlarmActivity extends Activity {
        /** Called when the activity is first created. */
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            Calendar cal = Calendar.getInstance();
    
            cal.setTimeInMillis(System.currentTimeMillis());
            cal.clear();
            cal.set(2012,2,8,18,16);
    
            AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
            Intent intent = new Intent(this, AlarmReceiver.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
           // cal.add(Calendar.SECOND, 5);
            alarmMgr.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
    
    
        }
    }
    

    【讨论】:

    • 我试试这个,我在这一行得到了错误: Intent intent = new Intent(this, AlarmReceiver.class);可能是什么问题?
    • @Gold 他创建了一个名为 AlarmReceiver 的 java .class,它被设置为警报的回调。您必须自己创建一个或创建另一个并将 AlarmReceiver 更改为您的 Activity 名称。
    • 对不起@chandukadam,...你能解释一下“2012,2,8,18,16”是什么意思吗?
    • @chandu kadam :: 我可以在特定日期的两个特定日期之间设置闹钟吗?请参阅下面的链接 [stackoverflow.com/questions/26667762/…
    • 为什么 cal.setTimeInMillis(System.currentTimeMillis());?
    【解决方案3】:

    以下代码非常适合警报。 我在这里提到的日期和时间是:2012-6-28,11:20:00 AM。 最重要的是,月份仅从 0 t0 11 指定。表示六月应由 5 指定。

            AlarmManager objAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);              
            Calendar objCalendar = Calendar.getInstance();
            objCalendar.set(Calendar.YEAR, 2012);
            //objCalendar.set(Calendar.YEAR, objCalendar.get(Calendar.YEAR));
            objCalendar.set(Calendar.MONTH, 5);
            objCalendar.set(Calendar.DAY_OF_MONTH, 28);
            objCalendar.set(Calendar.HOUR_OF_DAY, 11);
            objCalendar.set(Calendar.MINUTE, 20);
            objCalendar.set(Calendar.SECOND, 0);
            objCalendar.set(Calendar.MILLISECOND, 0);
            objCalendar.set(Calendar.AM_PM, Calendar.AM);         
    
            Intent alamShowIntent = new Intent(this,AlarmActivity.class);
            PendingIntent alarmPendingIntent = PendingIntent.getActivity(this, 0,alamShowIntent,0 );
    
            objAlarmManager.set(AlarmManager.RTC_WAKEUP,objCalendar.getTimeInMillis(), alarmPendingIntent);
    

    【讨论】:

    • 我会尝试使用这个。 :D @Jomia
    • 如果我知道会是这样,一切都是徒劳的......
    猜你喜欢
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2016-10-08
    • 1970-01-01
    相关资源
    最近更新 更多