解决定时开关机时间差不得小于10分钟

1.分析思路

<1>在定时开关机功能上限制开关机时间差在10分钟以内需要考虑到一下情况:

1.开机或关机只有一个被打开,则允许设置

2.开机和关机功能都打开并且均为一次性操作,且时间差大于10,则允许设置

3.开机(关机)一次性,而关机(开机)操作,且时间差大于10,则允许设置

4.重复周天操作,且时间差大于10,则允许设置

<2>在保存设置时间时限制,和打开关闭界面进行限制

2.功能实现

AlarmClock.java

private boolean verifyConflict(Alarm mAlarm){

Alarm verAlarm;

if(mAlarm.mId==1){

verAlarm= Alarms.getAlarm(getContentResolver(), 2);

}else{

verAlarm= Alarms.getAlarm(getContentResolver(), 1);

}

if(verAlarm == null){

return false;

}

if(isRepeat(verAlarm,mAlarm)){

return true;

}else{

return false;

}

}

private boolean isRepeat(Alarm verAlarm,Alarm mAlarm){

boolean[] mDays = verAlarm.mDaysOfWeek.getBooleanArray();

boolean[] days =mAlarm.mDaysOfWeek.getBooleanArray();

boolean common=false;

Calendar c=Calendar.getInstance();

int today = (c.get(Calendar.DAY_OF_WEEK) + 5) % 7;

boolean tenMore=(Math.abs((verAlarm.mHour*60+verAlarm.mMinutes)-(mAlarm.mHour*60+mAlarm.mMinutes))>=10);

for(int i=0;i<days.length;i++){

for(int j=0;j<mDays.length;j++){

if(i==j&&days[i]==true&&mDays[j]==true){

common=true;

}

}

}

if(!verAlarm.mEnabled){

return false;

}

if(verAlarm.mDaysOfWeek.getCoded()==0&&mAlarm.mDaysOfWeek.getCoded()==0){

if(tenMore)

return false;

else

return true;

}

if((mAlarm.mDaysOfWeek.getCoded()==0&&mDays[today])||(verAlarm.mDaysOfWeek.getCoded()==0&&days[today])){

if(tenMore)

return false;

else

return true;

}

if(common){

if(tenMore)

return false;

else

return true;

}

return false;

}

@Override

public void bindView(View view, Context context, Cursor cursor) {

Xlog.d(TAG, "bindView");

final Alarm alarm = new Alarm(cursor);

final Context cont = context;

CheckBox onButton = (CheckBox) view.findViewById(R.id.alarmButton);

if (onButton != null) {

onButton.setChecked(alarm.mEnabled);

onButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

boolean isChecked = ((CheckBox) v).isChecked();

Alarms.enableAlarm(cont, alarm.mId, isChecked);

if (isChecked) {

//+Bug285393,huangyabin.wt,ADD,20140901,The interval between power on/off schedule should be at least 10 minutes

if(verifyConflict(alarm)){

Toast.makeText(cont,R.string.interval,Toast.LENGTH_SHORT).show();

Alarms.enableAlarm(cont, alarm.mId, !isChecked);

((CheckBox) v).setChecked(!isChecked);

}else{

SetAlarm.popAlarmSetToast(cont, alarm.mHour, alarm.mMinutes, alarm.mDaysOfWeek, alarm.mId);

}

//-Bug285393,huangyabin.wt,ADD,20140901,The interval between power on/off schedule should be at least 10 minutes

}

}

});

}

ImageView onOffView = (ImageView) view.findViewById(R.id.power_on_off);

if (onOffView != null) {

onOffView.setImageDrawable(getResources().getDrawable(

(alarm.mId == 1) ? R.drawable.ic_settings_schpwron : R.drawable.ic_settings_schpwroff));

}

DigitalClock digitalClock = (DigitalClock) view.findViewById(R.id.digitalClock);

// set the alarm text

final Calendar c = Calendar.getInstance();

c.set(Calendar.HOUR_OF_DAY, alarm.mHour);

c.set(Calendar.MINUTE, alarm.mMinutes);

if (digitalClock != null) {

digitalClock.updateTime(c);

}

// Set the repeat text or leave it blank if it does not repeat.

TextView daysOfWeekView = (TextView) digitalClock.findViewById(R.id.daysOfWeek);

final String daysOfWeekStr = alarm.mDaysOfWeek.toString(context, false);

if (daysOfWeekView != null) {

if (daysOfWeekStr != null && daysOfWeekStr.length() != 0) {

daysOfWeekView.setText(daysOfWeekStr);

daysOfWeekView.setVisibility(View.VISIBLE);

} else {

daysOfWeekView.setVisibility(View.GONE);

}

}

}

};

SetAlarm.java

private boolean verifyConflict(){

Alarm verAlarm;

if(mId==1){

verAlarm= Alarms.getAlarm(getContentResolver(), 2);

}else{

verAlarm= Alarms.getAlarm(getContentResolver(), 1);

}

if(verAlarm == null){

return false;

}

if(isRepeat(verAlarm)){

return true;

}else{

return false;

}

}

private boolean isRepeat(Alarm verAlarm){

boolean[] verDays = verAlarm.mDaysOfWeek.getBooleanArray();

boolean[] mDays =mRepeatPref.getDaysOfWeek().getBooleanArray();

int mCoded=mRepeatPref.getDaysOfWeek().getCoded();

int verCoded=verAlarm.mDaysOfWeek.getCoded();

boolean common=false;

Calendar c=Calendar.getInstance();

int today = (c.get(Calendar.DAY_OF_WEEK) + 5) % 7;

boolean tenMore=(Math.abs((verAlarm.mHour*60+verAlarm.mMinutes)-(mHour*60+mMinutes))>=10);

for(int i=0;i<mDays.length;i++){

for(int j=0;j<verDays.length;j++){

if(i==j&&mDays[i]==true&&verDays[j]==true){

common=true;

}

}

}

if(!verAlarm.mEnabled){

return false;

}

if(verCoded==0&&mCoded==0){

if(tenMore)

return false;

else

return true;

}

if((mCoded==0&&verDays[today])||(verCoded==0&&mDays[today])){

if(tenMore)

return false;

else

return true;

}

if(common){

if(tenMore)

return false;

else

return true;

}

return false;

}

private void updateTime() {

Xlog.d(TAG, "updateTime " + mId);

mTimePref.setSummary(Alarms.formatTime(this, mHour, mMinutes, mRepeatPref.getDaysOfWeek()));

}

private void saveAlarm() {

final String alert = Alarms.ALARM_ALERT_SILENT;

//mEnabled |= mRepeatPref.mIsPressedPositive;

if(verifyConflict()){

mEnabled=false;

}else{

mEnabled = true;

}

Alarms.setAlarm(this, mId, mEnabled, mHour, mMinutes, mRepeatPref.getDaysOfWeek(), true, "", alert);

if (mEnabled) {

popAlarmSetToast(this.getApplicationContext(), mHour, mMinutes, mRepeatPref.getDaysOfWeek(), mId);

}else{

Toast.makeText(this.getApplicationContext(),R.string.interval,Toast.LENGTH_SHORT).show();

}

}

注!红色部分为功能实现的代码

3.测试建议

设置打开定时开关机功能

时间: 2024-10-12 12:38:27

解决定时开关机时间差不得小于10分钟的相关文章

自动重启、定时开关机、自动登录系统...

第一种方法:电脑自动开机.且音乐随你定 .自动定时开机此功能需要在BIOS中设定,并且你的主板的高级电源管理设置必须支持这个功能,不过现在大多数的主板全支持,放心使用吧.步骤一:启动系统按DEL,进入BIOS,然后选中 "POWER MANAGEMENT FEATURES"(电源管理设置),回车进入.在电源窗口中找到"RESTORE ON AC/POWERLOSS"项,按回车,然后通过方向键设置其值为"POWER ON".步骤二:选中"

定时开关机方案

WOL(从网卡唤醒)诸多限制,内网都不稳定,外网更不用说,放弃 断电恢复上次状态,必须的 通电即开机,必须的 WIFI智能开关一个 ? 受管理的服务器 Esxi 6 2台,windows 2012 2台 统一使用WIFI开关,esxi6设置SSH自启动,设置VM随主机开关机,HYPERV设置VM自启动 设置windows的定时任务,shutdown 使用C# SHARPSSH编写一个小程序,通过SSH连接上esxi执行/sbin/poweroff指令,设置windows定时任务,定时执行该程序使

解决Ubuntu开关机动画不正常方法

联想的笔记本,显卡NVIDIA GT218M,默认使用开源的驱动,但挂起后,再唤醒就黑屏回不到桌面. 1.解决办法:安装NVIDIA专有驱动 $sudo apt-get install nvidia-current 新的问题:开机logo和开/关机动画均不正常,只显示文字logo 解决办法: 1.编辑 /etc/default/grub文件 $sudo gedit /etc/default/grub 将 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

android中定时开关机的实现

关于android自动关机,网上有很多应用程序和例子. 相对于自动开机来说,自动关机可以在应用层通过设置alarm来实现.而自动开机,它需要底层rtc时钟的支持. 简介 我的实现是在设置程序里面增加一个接口,让用户设置自动开关机,这个自动开关机的设置可以参照闹钟的设置.关于自动关机,考虑到关机的时候,用户可能正有一些重要的操作,那么应该给用户一个机会去取消当前的关机. 1)一个BroadcastReceiver, 接收如下信息: a) 自定义的ACTIONREQUESTPOWEROFF:设置au

任务计划不只是linux才有哦,巧用任务计划实现WIN定时开关机

网络上提供定时关机的方法和软件很多,而关于定时开机的方法和软件却少的可怜,本文将告诉大家在Windows系统下实现定时开机的三个方法. 第一个方法,通过主板BIOS计划任务实现定时开机. 主板上有实时时钟(Real Time Clock,RTC)负责系统的计时,我们可以通过RTC指定开机的时间,就像闹钟一样.不过,由于这项功能很少被人使用,部分虽然提供了此功能的主板(如INTEL原装主板)其实并不能在指定时间开机,所以用户在正式使用前最好先进行测试. 具体操作方式为: 1.电脑开机之后根据屏幕上

alias,data,系统定时开关机的基本操作

1.修改命令提示符的格式,及每个字母所代表的功能,显示提示符格式输入echo $PS1PS1="[\[email protected]\h \W]\$"\e 或\033启用颜色 \u当前用户 \h主机名简称 \H主机名\w当前工作目录 \W当前工作目录基名 \24小时时间格式 \T 12小时时间格式 \T12小时时间格式 !命令历史数 #开机后命令历史数2.命令别名定义写法为alias command='别名'取消别名unalias [-a] name [name...] -a 取消所

Azure云 VM远程开关机脚本

背景: 在Azure云上准备的测试环境,考虑到运行的成本,需要通过计划任务设置定时开关机. 此操作可以通过多种方法实现,例如Azure提供的runbook,或者调用Azure SDK来实现,本文使用Azure sdk for python实现. 支持判断中国法定节假日.周六日,按Resource Group为单位进行开关机. Code: credentials.py #!/usr/bin/python from msrestazure.azure_cloud import AZURE_CHINA

echo的参数、date的参数、PATH、开关机、 vim快捷键

作者:George 归档:学习笔记 2017/12/28 本章正题:了解硬链接数. echo的参数.date的参数.PATH.开关机. vim快捷键 1.1 第三关剩余练习题 1.1.1 取出ip地址,awk 指定多把分割符,用 | [[email protected] oldboy]# ifconfig eth0 | awk -F "addr:|  Bc" 'NR==2{print $2}' 10.0.0.203 1.1.2 找出网卡配置文件中IPADDR的行 方法一: [[emai

每天定时重启/关机命令

点开始菜单,在运行里面输入cmd,按确定,然后输入如下信息: at 23:30 /every:M,T,W,Th,F,S,Su shutdown -s -t 120 23:30可以改成你要的时间,M,T,W,Th,F,S,Su分别对应星期一到星期天,如果你星期六星期天不想自动关机,就把S和Su去掉,120是倒计时时间,两分钟,你也可以根据需要增减 p每天定时关机命令 win+r键 或者 “开始”“运行” at 00:00 /every:M,T,W,Th,F,S,Su shutdown -s -t