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;
}
}