我正在使用setExactAndAllowWhileIdle()
来设置闹钟。但它只能工作一次。我该如何设置每天间隔1天的重复闹钟?
在API Level 23之前,setInexactRepeating
方法可以正常工作。
我正在使用setExactAndAllowWhileIdle()
来设置闹钟。但它只能工作一次。我该如何设置每天间隔1天的重复闹钟?
在API Level 23之前,setInexactRepeating
方法可以正常工作。
当广播接收器事件正在执行时,重新充电您的警报。
我的意思是,
public class CustomBroadcast extends WakefulBroadcastReceiver {
public static final String somekey = "somekey.somekey.somekey";
@Override
public void onReceive(Context ctx, Intent intent) {
// TODO Auto-generated method stub
ComponentName comp = new ComponentName(ctx.getPackageName(),
YourSevice.class.getName());
YourCustomClass.yourrechargefunction();
startWakefulService(ctx, intent.setComponent(comp));
}
}
public class YourCustomClass {
private final static int somekey_int = anynumber;
public static void yourrechargefunction() {
Intent intent = new Intent(CustomBroadcast.somekey):
PendingIntent pi = wPendingIntent.getBroadcast(ctx,somekey_int, intent, PendingIntent.FLAG_CANCEL_CURRENT);
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, nexttime, pi);
}
}
AlarmManager.setRepeating 在不同的 Android 版本上工作不正常。
尝试使用 setExact。它不会重复,但可以通过下面提到的方式实现重复功能:
更新后的 AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
context.sendBroadcast(new Intent("SERVICE_TEMPORARY_STOPPED"));
long repeatCount = PreferenceManager.getDefaultSharedPreferences(context).getLong("REPEAT_COUNT", 0L);
repeatCount++;
PreferenceManager.getDefaultSharedPreferences (context).edit().putLong("REPEAT_COUNT", repeatCount).apply()
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
manager.setExact(AlarmManager.RTC_WAKEUP, (repeatCount *System.currentTimeMillis()),pendingIntent);
}
}
在这里,我们维护一个repeatCount和变量(基于首选项),并在AlarmReceiver中递增它,并通过计算nextAlarmTime来再次安排闹钟,使用repeatCount * System.currentTimeMillis();