封装的工具类如下
import static android.content.Context.ALARM_SERVICE;
import android.app.AlarmManager; import android.app.PendingIntent;
import android.content.Context; import android.content.Intent;
import android.util.Log;
import java.text.ParseException; import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.Date;
public class AlarmUtils {
private final String TAG = AlarmUtils.class.getSimpleName();
private volatile static AlarmUtils singleton;
private AlarmUtils() {
}
public static AlarmUtils getSingleton() {
if (singleton == null) {
synchronized (AlarmUtils.class) {
if (singleton == null) {
singleton = new AlarmUtils();
}
}
}
return singleton;
}
AlarmManager am;
PendingIntent pi;
public void startAlarm(Context context) {
cancelAlarm();
Log.e(TAG, "设置闹钟");
Intent intent = new Intent(context, AlarmReceiver.class);
intent.setAction(AlarmReceiver.ALARM_ACTION);
pi = PendingIntent.getBroadcast(context, 0, intent, 0);
am = (AlarmManager) context.getSystemService(ALARM_SERVICE);
am.setExact(AlarmManager.RTC_WAKEUP, getAlarmTime(), pi);
}
private long getAlarmTime() {
try {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
Date alarmTime = formatter.parse("12:00");
Calendar ca = Calendar.getInstance();
ca.set(Calendar.HOUR_OF_DAY, alarmTime.getHours());
ca.set(Calendar.MINUTE, alarmTime.getMinutes());
ca.set(Calendar.SECOND, 0);
return ca.getTimeInMillis();
} catch (ParseException e) {
e.printStackTrace();
return 0;
}
}
private void cancelAlarm() {
if (am != null && pi != null) {
am.cancel(pi);
Log.e(TAG, "取消闹钟");
}
}
}
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class AlarmReceiver extends BroadcastReceiver {
private String TAG = AlarmReceiver.class.getSimpleName();
public static final String ALARM_ACTION = "com.test.action.alarm";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ALARM_ACTION)) {
}
}
}
最后别忘了在清单文件注册AlarmReceiver
使用方法
AlarmUtils.getSingleton().startAlarm(this);