package com.jqyd.android.module.lbs; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import com.jqyd.android.module.lbs.Interface.IAlarm; import com.jqyd.android.module.lbs.util.JqydDateUtil; import com.jqyd.android.module.lbs.util.Optsharepre_interface; import com.jqyd.android.module.lbs.util.WriteFile; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.util.Log; /** * 定时类 * @author jinglinxiao * */ public class TimingLocating { private boolean nowUpLoc = false; private long jgsj; private int locType = 1; private IAlarm lintener; private Context service; Optsharepre_interface shareFile; WriteFile writeFile = new WriteFile("定时定位" + JqydDateUtil.getDateDayOne(new Date())); private AlarmManager upLocAlarm; private PendingIntent upLocPi ; private long starttime; private long endtime; private String hisTime; private long nextupTime ; private boolean isRun=false; private boolean isUsePoint = false; public TimingLocating(long jgsj, long starttime,long endtime, Context service) { writeFile.writeToFile("初始化定时类:"+"间隔时间:"+jgsj+"开始时间:"+starttime+"结束时间:"+endtime); this.jgsj = jgsj; this.service = service; this.starttime = starttime; this.endtime = endtime; shareFile = new Optsharepre_interface(service); upLocAlarm = (AlarmManager) service.getSystemService(service.ALARM_SERVICE); } public TimingLocating(long jgsj, long starttime, long endtime,Context service,boolean isUsePoint){ writeFile.writeToFile("初始化定时类:"+"间隔时间:"+jgsj+"开始时间:"+starttime+"结束时间:"+endtime+"是否使用整点"+isUsePoint); this.jgsj = jgsj; this.service = service; this.starttime = starttime; this.endtime = endtime; this.isUsePoint = isUsePoint; shareFile = new Optsharepre_interface(service); upLocAlarm = (AlarmManager) service.getSystemService(service.ALARM_SERVICE); } public void registerLintener(IAlarm lintener){ this.lintener = lintener; } public void start(){ isRun = true; Intent upLocIntent = new Intent(service, service.getClass()); upLocPi = PendingIntent.getService(service, 0,upLocIntent, 0); hisTime = shareFile.getDataFromPres("hisSbTime"); writeFile.writeToFile("hisTime" + hisTime+new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(Long.parseLong(hisTime))); new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(getCurrTime()); if((getCurrTime()>starttime&&getCurrTime()<endtime)||(starttime==0||endtime==0)){ if (hisTime.equals("0")) { upLocAlarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+ jgsj, upLocPi); nowUpLoc = true; } else { long hislong = Long.parseLong(hisTime); long nextup = isUpLoc(hislong); new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(System.currentTimeMillis()+jgsj); Log.e("UpLoc", "nextupTime____"+new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(nextupTime)); if (nextup == 0) { upLocAlarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+jgsj, upLocPi); writeFile.writeToFile("第一次设置的间隔时间为::"+new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(System.currentTimeMillis()+jgsj)); nowUpLoc = true; } else if(nextup == -1) { upLocAlarm.set(AlarmManager.RTC_WAKEUP, nextupTime, upLocPi); nowUpLoc = false; }else if(nextup == 1){ upLocAlarm.set(AlarmManager.RTC_WAKEUP, nextupTime, upLocPi); nowUpLoc = true; }else{ upLocAlarm.set(AlarmManager.RTC_WAKEUP, nextupTime, upLocPi); nowUpLoc = false; } writeFile.writeToFile("nextup" + nextup + nowUpLoc + hislong+",nextupTime:"+JqydDateUtil.getDateSecOne(JqydDateUtil.getCalendarFromLong(nextupTime).getTime())); } }else if(getCurrTime()<starttime){ SimpleDateFormat sdf = new SimpleDateFormat("HH-mm"); // SimpleDateFormat data = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); // String string = data.format(new Date()).substring(0, 10); // try { // starttime = data.parse(string+sdf.format(starttime)+"00").getTime(); // } catch (ParseException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } long jg = 0; try { jg = starttime-sdf.parse(sdf.format(System.currentTimeMillis())).getTime(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } writeFile.writeToFile("当前时间小于开始的时间:"+jg); upLocAlarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+ jg, upLocPi); }else if(getCurrTime()>endtime){ writeFile.writeToFile("当前时间大于开始的时间"); stop(); } writeFile.writeToFile("up location"); if (nowUpLoc) { shareFile.editPres("hisSbTime", System.currentTimeMillis()+""); if(lintener!=null)lintener.isExecute(true); }else{ if(lintener!=null)lintener.isExecute(false); } } private long getCurrTime(){ SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); try { return sdf.parse(sdf.format(System.currentTimeMillis())).getTime(); } catch (ParseException e) { e.printStackTrace(); return 0; } } public void stop(){ upLocAlarm.cancel(upLocPi); isRun=false; } /** * 计算到整点 * @param time 上次上报时间的long值 * @return */ private long isUpLoc(long time) { long jgtime = System.currentTimeMillis() - time; // // if (jgtime >= (jgsj - 60 * 1000)) { // return 0; // } else { // return jgsj - jgtime; // } int startTime = JqydDateUtil.longToIntForHisUpTime(starttime); int hisTime = JqydDateUtil.longToIntForHisUpTime(time); int jgsjTime = (int) (jgsj/60000); writeFile.writeToFile("开始时间:"+startTime+"间隔时间:"+jgsjTime); int outOfPeriod = JqydDateUtil.outOfPeriod(startTime,(int)jgsjTime,hisTime); //-1:在间隔时间内;0:正好在间隔时间点上,需要上报;1:超过间隔时间,需要上报一次,并休眠到下个间隔时间点上; switch (outOfPeriod) { case -1: if(isUsePoint){ nextupTime = time+jgsj; }else{ nextupTime = JqydDateUtil.getNextTurnTime(startTime, jgsjTime).getTimeInMillis(); } return -1; case 0: nextupTime = System.currentTimeMillis()+jgsj; return 0; case 1: if(isUsePoint){ nextupTime = System.currentTimeMillis()+jgsj; }else{ nextupTime = JqydDateUtil.getNextTurnTime(startTime, jgsjTime).getTimeInMillis(); } // nextup = jgsj - jgtime; return 1; } return nextupTime; } }