闹铃

来源:互联网 发布:数据库中column 编辑:程序博客网 时间:2024/04/30 12:25


包括单次闹铃、按照星期设置循环闹铃及循环闹铃的取消

/** * 转换成hh:mm 的时间格式。 * @param hour * @param minute * @return eg:08:30 */public static String getTimeStr(int hour, int minute) {StringBuilder sb = new StringBuilder();if (hour < 10) sb.append("0");sb.append(hour).append(":");if (minute < 10) sb.append("0");sb.append(minute);return sb.toString();}public static int getAmPmType(){Calendar mCalendar = Calendar.getInstance();int ampm = mCalendar.get(Calendar.AM_PM);if(ampm == Calendar.AM){return UpdateDef.isAm;}else{return UpdateDef.isPm;}}public static int getWeekType(){Calendar mCalendar = Calendar.getInstance();int ampm = mCalendar.get(Calendar.AM_PM);Log.i("sxy", "ampm="+ampm);return DAYS_KEY_MAP.indexOfValue(mCalendar.get(Calendar.DAY_OF_WEEK));}//-------------------------时间到了的闹铃-----------------------------//--目前只为小学的古诗词和小学中学的国学乐园发送时间到了的广播public static void setupTimeIsOverAlarm(Context con, int mListenDur){Intent intent = new Intent(UpdateDef.TIMEISOVER_ACTION);    PendingIntent pendingIntent = PendingIntent.getBroadcast(con, UpdateDef.TIMEISOVER_ALARMID, intent, 0);    AlarmManager am = (AlarmManager)con.getSystemService(con.ALARM_SERVICE);    long now = System.currentTimeMillis();am.set(AlarmManager.RTC_WAKEUP, now+mListenDur*60*1000, pendingIntent);Log.i(TAG, "setupTimeIsOverAlarm alarm: alarmId="+UpdateDef.TIMEISOVER_ALARMID+", dur="+mListenDur);}//---------------------------闹铃-------------------------------private static final long INTERVAL = AlarmManager.INTERVAL_DAY * 7;// 7天private static final SparseIntArray DAYS_KEY_MAP = new SparseIntArray();static {DAYS_KEY_MAP.append(UpdateDef.week_mon, Calendar.MONDAY);DAYS_KEY_MAP.append(UpdateDef.week_tue, Calendar.TUESDAY);DAYS_KEY_MAP.append(UpdateDef.week_wed, Calendar.WEDNESDAY);DAYS_KEY_MAP.append(UpdateDef.week_thu, Calendar.THURSDAY);DAYS_KEY_MAP.append(UpdateDef.week_fri, Calendar.FRIDAY);DAYS_KEY_MAP.append(UpdateDef.week_sat, Calendar.SATURDAY);DAYS_KEY_MAP.append(UpdateDef.week_sun, Calendar.SUNDAY);}private static int alarmId = 0;//保证闹铃id唯一:Integer.valueOf(""+weekType+ampmType+stagetype)public final static int getAlarmId(int weektype, int ampmtype, int stagetype){return Integer.valueOf(""+weektype+ampmtype+stagetype);//文件名由星期类型加上间隔符再加上早晚类型和年级类型组成}//设置单次闹铃public static void setOneAlarm(Context con, SaveDetailInfo mInfo){if(mInfo == null || mInfo.isHasSet() == false || mInfo.isOpen() == false){Log.i(TAG, "setup alarm error");return;}Calendar mCalendar = Calendar.getInstance();int currentHour = mCalendar.get(Calendar.HOUR_OF_DAY);int currentMinute = mCalendar.get(Calendar.MINUTE);int beginHour = mInfo.getBeginTime_hour();int beginMinute = mInfo.getBeginTime_min();if (beginHour < 0 || beginMinute < 0|| beginHour < currentHour|| (beginHour == currentHour && beginMinute < currentMinute)) {return;}mCalendar.set(Calendar.HOUR_OF_DAY, beginHour);mCalendar.set(Calendar.MINUTE, beginMinute);mCalendar.set(Calendar.SECOND, 0);mCalendar.set(Calendar.MILLISECOND, 0);Intent intent = new Intent(UpdateDef.ACTION_UPDATE_REMIND);intent.putExtra(UpdateDef.mAmPm_Flag, mInfo.getAmPmType());intent.putExtra(UpdateDef.mWeek_Flag, mInfo.getWeekType());intent.putExtra(UpdateDef.mStage_Flag, mInfo.getStageType());PendingIntent pi = PendingIntent.getActivity(con, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);AlarmManager am = (AlarmManager)con.getSystemService(con.ALARM_SERVICE);am.set(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), pi);}//设置闹铃public static void setupAlarm(Context con, SaveDetailInfo mInfo) {if(mInfo == null || mInfo.isHasSet() == false || mInfo.isOpen() == false){Log.i(TAG, "setup alarm error");return;}alarmId = getAlarmId(mInfo.getWeekType(), mInfo.getAmPmType(), mInfo.getStageType());cancelAlarm(con, mInfo);Calendar mCalendar = Calendar.getInstance();int beginHour = mInfo.getBeginTime_hour();int beginMinute = mInfo.getBeginTime_min();mCalendar.set(Calendar.DAY_OF_WEEK, DAYS_KEY_MAP.get(mInfo.getWeekType()));mCalendar.set(Calendar.HOUR_OF_DAY, beginHour);mCalendar.set(Calendar.MINUTE, beginMinute);mCalendar.set(Calendar.SECOND, 0);mCalendar.set(Calendar.MILLISECOND, 0);long triggerAtTime = mCalendar.getTimeInMillis();long now = System.currentTimeMillis();        if (triggerAtTime/1000/60 < now/1000/60) { // 下周            triggerAtTime += AlarmManager.INTERVAL_DAY * 7;        }        Intent intent = new Intent(UpdateDef.ACTION_UPDATE_REMIND);intent.putExtra(UpdateDef.mAmPm_Flag, mInfo.getAmPmType());intent.putExtra(UpdateDef.mWeek_Flag, mInfo.getWeekType());intent.putExtra(UpdateDef.mStage_Flag, mInfo.getStageType());        PendingIntent pi = PendingIntent.getActivity(con, alarmId, intent, PendingIntent.FLAG_UPDATE_CURRENT);AlarmManager am = (AlarmManager)con.getSystemService(con.ALARM_SERVICE);if(Hardware.getIsSHUTDOWN_WAKEUP()){am.setRepeating(AlarmManager.RTC_SHUTDOWN_WAKEUP, triggerAtTime, INTERVAL, pi);//深度关机时闹铃启动方式RTC_SHUTDOWN_WAKEUP}else{am.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtTime, INTERVAL, pi);}Log.i(TAG, "set alarm: alarmId="+alarmId+", time=" + getTimeStr(beginHour, beginMinute)+", path="+mInfo.getBookPath());}//取消闹铃public static void cancelAlarm(Context con, SaveDetailInfo mInfo) {if(mInfo == null || mInfo.isHasSet() == false){Log.i(TAG, "cancel alarm error");return;}alarmId = getAlarmId(mInfo.getWeekType(), mInfo.getAmPmType(), mInfo.getStageType());Intent intent = new Intent(UpdateDef.ACTION_UPDATE_REMIND);PendingIntent pi = PendingIntent.getActivity(con, alarmId, intent, PendingIntent.FLAG_UPDATE_CURRENT);AlarmManager am = (AlarmManager)con.getSystemService(con.ALARM_SERVICE);am.cancel(pi);Log.i(TAG, "cancel alarm: alarmId="+alarmId);}//-------------------------------------------------------------



0 0
原创粉丝点击