我如何设置一个警报管理器来启动每个特定的星期几和安卓时间?

时间:2011-04-08 23:13:08

标签: java android alarmmanager

例如,我希望在中午每个星期天都会发出警报......我该怎么做?

2 个答案:

答案 0 :(得分:14)

使用AlarmManager类:

http://developer.android.com/reference/android/app/AlarmManager.html

  

课程概述

     

此类提供对   系统报警服务。这些允许你   安排您的应用程序运行   在未来的某个时刻。当一个   警报响起,有意图   已经注册的是广播   系统,自动启动   目标应用程序,如果不是   已经运行。注册的警报是   在设备睡着时保留   (并且可以选择唤醒设备   如果他们在那段时间内离开),但是   如果关闭,将被清除   并重新启动。

使用public void set (int type, long triggerAtTime, PendingIntent operation)设置触发时间。

使用void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)安排重复闹铃。

这是一个完整的例子。我真的不记得所有的Calendar方法,所以我确信这部分内容可以简化,但这是一个开始,你可以在以后进行优化:

AlarmManager alarm = (AlarmMAnager) Context.getSystemService(Context.ALARM_SERVICE);
Calendar timeOff = Calendar.getInstance();
int days = Calendar.SUNDAY + (7 - timeOff.get(Calendar.DAY_OF_WEEK)); // how many days until Sunday
timeOff.add(Calendar.DATE, days);
timeOff.set(Calendar.HOUR, 12);
timeOff.set(Calendar.MINUTE, 0);
timeOff.set(Calendar.SECOND, 0);

alarm.set(AlarmManager.RTC_WAKEUP, timeOff.getTimeInMillis(), yourOperation);

答案 1 :(得分:0)

最后这个正确的解决方案,如果设置为(sun,tus,fri),你必须为这三天创建三个警报 以下代码在每个星期日设置警报并发送dayOfWeek = 1;

 public void setAlarm_sun(int dayOfWeek) {
     cal1.set(Calendar.DAY_OF_WEEK, dayOfWeek);
     Toast.makeText(getApplicationContext(), "sun "+cal1.get(Calendar.DAY_OF_WEEK), 222).show();

     Toast.makeText(getApplicationContext(), "Finsh", 222).show();

        Intent intent = new Intent(this, SecActivity.class);
        PendingIntent pendingIntent0 = PendingIntent.getBroadcast(this, 0,
                intent, 0);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 12345,
                intent, PendingIntent.FLAG_UPDATE_CURRENT);

         Long alarmTime = cal1.getTimeInMillis();
         AlarmManager am = (AlarmManager) getSystemService(Activity.ALARM_SERVICE);

       // am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime,7* 24 * 60 * 60 * 1000 , pendingIntent);
        am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime,7* 24 * 60 * 60 * 1000 , pendingIntent);

}