我一直在研究这个应该每天在给定时间运行的应用程序,除了周末。我已经使用AlarmBroadCastReceiver
在给定时间触发了某段代码。我在AlarmBroadCastReceiver
课程中有这段代码:
public void SetAlarm(Context context) {
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
intent.putExtra(ONE_TIME, Boolean.FALSE);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 2);
calendar.set(Calendar.MINUTE, 30);
calendar.set(Calendar.SECOND, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 0, pi);
}
基本上我尝试在那个时候设置重复闹钟。
然后只需按一下按钮,我就可以在我的MainActivity中找到它,我可以从中调用它:
public void onStartAlarmClicked(View view){
Context context = this.getApplicationContext();
if(alarm != null){
Log.e(TAG, "starting alarm");
alarm.SetAlarm(context);
}else{
Log.e(TAG, "Alarm is null");
}
}
其中alarm
是AlarmBroadCastReceiver
类的对象。
我遇到的问题是代码只触发一次。一旦它命中2:30,它就会开火。但是,当我将时间设置回2:29并等待2:30,或者将日期设置为1天,然后将时间设置为2:20并等待2:30时,代码将不再触发。
我有一种感觉,我忽略了设置闹钟时间的相当简单但我现在无法看到它。
答案 0 :(得分:2)
您必须设置BroadcastReceiver以收听时间和日期更改,然后重置警报。 由于您希望始终触发接收器,因此最好在Manifest中进行设置。
在自己的文件中创建类
public class DateTimeChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(Intent.ACTION_TIME_CHANGED) ||
action.equals(Intent.ACTION_TIMEZONE_CHANGED) ||
action.equals(Intent.ACTION_DATE_CHANGED))
{
resetAlarm();
}
}
}
在清单中
<receiver android:name=".DateTimeChangeReceiver ">
<intent_filter>
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
<action android:name="android.intent.action.TIME_SET" />
<action android:name="android.intent.action.DATE_CHANGED" />
</intent_filter>
</receiver>