MainActivity.java
Intent intent = new Intent(this, AlarmReceiver24.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager alarmMgr = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY,1);
calendar.set(Calendar.MINUTE, 50);
calendar.set(Calendar.SECOND, 0);
String time= String.valueOf(calendar.getTime());
Log.i("Time:",time);
//repeat alarm every 24hours
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY, alarmIntent);
AlarmReceiver 类
public class AlarmReceiver24 extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
reference.child("Total").setValue(0);
Toast.makeText(context, "Total Reset", Toast.LENGTH_SHORT).show();
}
}
Android 清单
<receiver android:name=".AlarmReceiver24"/>
我希望代码每天在午夜 12:00:00 运行一次,但即使在使用 AlarmManager.INTERVAL_DAY 后,它仍会一次又一次地触发。我不知道我做错了什么。
答案 0 :(得分:2)
每次打开 MainActivity
时都会创建一个新的 PendingIntent
当您开始 MainActivity
时,您应该 remove 所有先前安排的闹钟。
还有
calendar.set(Calendar.HOUR_OF_DAY, 1);
calendar.set(Calendar.MINUTE, 50);
calendar.set(Calendar.SECOND, 0);
不是午夜。
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
现在是午夜
答案 1 :(得分:0)
闹钟是过去设置的,所以添加了这个条件并解决了
if(calendar.before(Calendar.getInstance()))
calendar.add(Calendar.DATE,1);