Alarmmanager 在重启后第二天不工作
Alarmmanager doesn't work on next day after reboot
这就是我创建闹钟的方式
PendingIntent alarmIntent = PendingIntent.getBroadcast(getContext(), 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) getContext().getSystemService(ALARM_SERVICE);
Calendar startTime = Calendar.getInstance();
startTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
startTime.set(Calendar.MINUTE, minute);
startTime.set(Calendar.SECOND, 0);
if (startTime.getTimeInMillis() < System.currentTimeMillis()) {
startTime.add(Calendar.DAY_OF_MONTH, 1);
}
long intendedTime = startTime.getTimeInMillis();
alarm.setRepeating(AlarmManager.RTC_WAKEUP, intendedTime, AlarmManager.INTERVAL_DAY, alarmIntent);
我在 BroadcastReceiver 中调用的方法:
private void startAlarm(Context context) {
Intent mainIntent = new Intent(context, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 1, mainIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationManager myNotificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification.Builder builder = new Notification.Builder(context);
builder.setSmallIcon(R.drawable.l_active)
.setContentTitle(context.getString(R.string.morn_title))
.setContentText(context.getString(R.string.morn_text))
.setWhen(System.currentTimeMillis())
.setContentIntent(contentIntent);
myNotificationManager.notify(1, builder.build());
}
所以我遇到了 here 这样的问题。当我将闹钟设置为 9:51 并且我的时间是 10:00 时 - 闹钟不工作。添加后
if (startTime.getTimeInMillis() < System.currentTimeMillis()) {
startTime.add(Calendar.DAY_OF_MONTH, 1);
}
闹钟工作正常,但当我重新启动时 phone - 它不起作用。我将尝试用一个例子来解释:
我 phone 上的时间是 23:50。我在 00:05 上设置了闹钟,然后我重新启动 phone 并等到 00:05。并且警报不响。但!如果我不重启我的 phone - 一切正常。还有一件事:当我没有设置过去的时间时,phone 重启没有问题(例如,我的时间是 22:00,我将时间设置为 22:05,重新启动 phone 并且有效)
AlarmManager 即使在重启后也不会持续存在。
您可以通过创建 BroadCastReceiver 使 AlarmManager 在重启后工作,它将在设备启动完成时启动警报。
在 BroadCastReceiver class.
中使用 <action android:name="android.intent.action.BOOT_COMPLETED" />
捕获引导 activity
您需要在 AndroidManifest.xml
中添加上一行,如下所示:
<receiver android:name=".StartUpReceiver" android:enabled="true" android:exported="false" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
class 启动接收器
public class StartUpReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
// reset your alarms here
}
}
}
在StartUpReceiver
中您可以再次通过AlarmManager
创建闹钟。我建议在 database
或 SharedPreferences
中使用 need to store alarm info
以便在设备完成重启时获得创建警报的信息。
这就是我创建闹钟的方式
PendingIntent alarmIntent = PendingIntent.getBroadcast(getContext(), 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) getContext().getSystemService(ALARM_SERVICE);
Calendar startTime = Calendar.getInstance();
startTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
startTime.set(Calendar.MINUTE, minute);
startTime.set(Calendar.SECOND, 0);
if (startTime.getTimeInMillis() < System.currentTimeMillis()) {
startTime.add(Calendar.DAY_OF_MONTH, 1);
}
long intendedTime = startTime.getTimeInMillis();
alarm.setRepeating(AlarmManager.RTC_WAKEUP, intendedTime, AlarmManager.INTERVAL_DAY, alarmIntent);
我在 BroadcastReceiver 中调用的方法:
private void startAlarm(Context context) {
Intent mainIntent = new Intent(context, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 1, mainIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationManager myNotificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification.Builder builder = new Notification.Builder(context);
builder.setSmallIcon(R.drawable.l_active)
.setContentTitle(context.getString(R.string.morn_title))
.setContentText(context.getString(R.string.morn_text))
.setWhen(System.currentTimeMillis())
.setContentIntent(contentIntent);
myNotificationManager.notify(1, builder.build());
}
所以我遇到了 here 这样的问题。当我将闹钟设置为 9:51 并且我的时间是 10:00 时 - 闹钟不工作。添加后
if (startTime.getTimeInMillis() < System.currentTimeMillis()) {
startTime.add(Calendar.DAY_OF_MONTH, 1);
}
闹钟工作正常,但当我重新启动时 phone - 它不起作用。我将尝试用一个例子来解释: 我 phone 上的时间是 23:50。我在 00:05 上设置了闹钟,然后我重新启动 phone 并等到 00:05。并且警报不响。但!如果我不重启我的 phone - 一切正常。还有一件事:当我没有设置过去的时间时,phone 重启没有问题(例如,我的时间是 22:00,我将时间设置为 22:05,重新启动 phone 并且有效)
AlarmManager 即使在重启后也不会持续存在。 您可以通过创建 BroadCastReceiver 使 AlarmManager 在重启后工作,它将在设备启动完成时启动警报。
在 BroadCastReceiver class.
中使用<action android:name="android.intent.action.BOOT_COMPLETED" />
捕获引导 activity
您需要在 AndroidManifest.xml
中添加上一行,如下所示:
<receiver android:name=".StartUpReceiver" android:enabled="true" android:exported="false" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
class 启动接收器
public class StartUpReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
// reset your alarms here
}
}
}
在StartUpReceiver
中您可以再次通过AlarmManager
创建闹钟。我建议在 database
或 SharedPreferences
中使用 need to store alarm info
以便在设备完成重启时获得创建警报的信息。