package cm.android.sdk.alarm;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.SystemClock;
public class AlarmUtil {
private AlarmUtil() {
}
@Deprecated
public static void startImmediately(Context context, Intent broadcastIntent, int requestCode, long period) {
start(context, broadcastIntent, requestCode, 0, period);
}
@Deprecated
public static void start(Context context, Intent broadcastIntent, int requestCode,
long delayAtMillis, long period) {
PendingIntent sender = genPendingBroadcast(context, requestCode, broadcastIntent);
long currentTime = SystemClock.elapsedRealtime();
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
//循环发送广播
am.cancel(sender);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, currentTime + delayAtMillis,
period, sender);
}
public static void schedule(Context context, Intent broadcastIntent, int requestCode, long delayAtMillis) {
PendingIntent sender = genPendingBroadcast(context, requestCode, broadcastIntent);
long currentTime = SystemClock.elapsedRealtime();
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.cancel(sender);
setCompat(am, AlarmManager.ELAPSED_REALTIME_WAKEUP, currentTime + delayAtMillis, sender);
}
public static void setCompat(AlarmManager am, int type, long triggerAtMillis, PendingIntent operation) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
am.setExactAndAllowWhileIdle(type, triggerAtMillis, operation);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
am.setExact(type, triggerAtMillis, operation);
} else {
am.set(type, triggerAtMillis, operation);
}
}
public static void cancel(Context context, Intent broadcastIntent, int requestCode) {
PendingIntent sender = genPendingBroadcast(context, requestCode, broadcastIntent);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.cancel(sender);
}
private static PendingIntent genPendingBroadcast(Context context, int requestCode, Intent broadcastIntent) {
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, requestCode,
broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
return pendingIntent;
}
}