我想创建一个每天运行特定代码的应用程序。 我在 stackOverflow 中询问,他们告诉我警报管理器是正确的方法。所以我用了它并想出了这个。
AndroidManifest.xml(内部
<application>
)
<receiver android:name=".DailyTaskBroadcastReceiver" />
MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
scheduleDailyTask(this);
}
public void scheduleDailyTask(Context context) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, DailyTaskBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,
PendingIntent.FLAG_NO_CREATE | PendingIntent.FLAG_IMMUTABLE); //from FLAG_NO_CREATE to FLAG_UPDATE_CURRENT
//Made it repeat every minute for testing
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 1);
// Set the alarm to repeat every minute
alarmManager.setRepeating(
AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
60 * 1000, // 60 seconds * 1000 milliseconds
pendingIntent );
}
DailyTaskBroadcastReceiver.java
public class DailyTaskBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "bomboclat minute has passed", Toast.LENGTH_SHORT).show();
storage.createNewDailyCSV(context);
}
}
现在,最初一切都运行良好。即使应用程序没有在我的手机上运行,代码也会运行,并且吐司每分钟都会工作。但是当我再次运行该应用程序时它现在不起作用了。
我不知道出了什么问题,我迷失了。
在代码中进行以下更改
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,
PendingIntent.FLAG_NO_CREATE);
if (pendingIntent == null) {
// Alarm is not set, set it
pendingIntent = PendingIntent.getBroadcast(context, 0, intent,
PendingIntent.FLAG_IMMUTABLE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 1);
// Set the alarm to repeat every minute
alarmManager.setRepeating(
AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
60 * 1000, // 60 seconds * 1000 milliseconds
pendingIntent );
} else {
// Alarm is already set
}
和
记得在 AndroidManifest.xml 文件中声明 DailyTaskBroadcastReceiver:
<receiver android:name=".DailyTaskBroadcastReceiver" />