package com.jqyd.shareInterface;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import org.json.JSONException;
import org.json.JSONObject;
import com.jqyd.app.MyApp;
import com.jqyd.app.WriteFile;
import com.jqyd.manager.UpPlanManager;
import com.jqyd.pub.JqydDateUtil;
import android.app.ActivityManager;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.app.ActivityManager.RunningServiceInfo;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.IBinder;
import android.telephony.TelephonyManager;
import android.util.Log;
public class UpPlanService extends Service {
private final static String TAG = "LXRBRZ-UPPLAN";
private WriteFile writeFile ;
private AlarmManager upAlarm;
private MyApp myApp = null;// 共享池对象
public Optdb_interfce db = null;
private Optsharepre_interface shareFile = null;
private TelephonyManager tm = null;
private UpdataToServer server = null;
private String imsi = "";
long beforeTimeTemp = 0;
long currTime = 0;
String serverTime = "";
String log = "";
boolean isSuccess = false;// 当天是否与服务器交互过
boolean isOnReload = false;// 是否重启service
boolean isUpdateIng = false;
private UpPlanManager upPlanMgr;
@Override
public void onCreate() {
writeFile = new WriteFile(UpPlanService.this,TAG
+ JqydDateUtil.getDateDayOne(new Date()));
writeFile.writeToFile("onCreate");
// TODO Auto-generated method stub
super.onCreate();
myApp = (MyApp) this.getApplication();
upPlanMgr = new UpPlanManager();
shareFile = new Optsharepre_interface(UpPlanService.this);
upAlarm = (AlarmManager) this.getSystemService(ALARM_SERVICE);
Intent upIntent = new Intent(UpPlanService.this, UpPlanService.class);
final PendingIntent upPi = PendingIntent.getService(UpPlanService.this,
0, upIntent, 0);
//upAlarm.set(AlarmManager.RTC_WAKEUP, upPlanMgr
// .getArrangeUpdateCalendar(shareFile).getTimeInMillis(), upPi);
upAlarm.setRepeating(AlarmManager.RTC_WAKEUP, upPlanMgr
.getArrangeUpdateCalendar(shareFile).getTimeInMillis(),
AlarmManager.INTERVAL_DAY, upPi);
}
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
Log.e("UpPlanService", "UpPlanServicestwart");
}
// 判断今天是否已经更新定时上报计划
private boolean isUpdateToday() {
return JqydDateUtil.getDateDayTwo(new Date()).equals(
shareFile.getUpdatePlanTime()) ? true : false;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
writeFile.writeToFile("onStartCommand isUpdateIng:" +isUpdateIng);
if (!isUpdateToday()) {
writeFile.writeToFile("today is not update plan");
handServer();
writeFile.deleteFile(5);
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
/**
* 与服务器交互
*/
public void handServer() {
System.out.println("handServer");
class PDResult {
boolean isSucess;
}
AsyncTask<Context, Void, PDResult> task = new AsyncTask<Context, Void, PDResult>() {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected void onPostExecute(PDResult result) {
Log.e("xiao", " UpPlanService+++++"+result.isSucess);
if (result.isSucess) {
Log.e("xiao", " upPlanService判断连续上报服务:"+myApp.isServiceRunning());
if (myApp.isServiceRunning()) {
System.out
.println("update sucess, service is running ,stop it");
writeFile
.writeToFile("update sucess, service is running ,stop it");
stopService(new Intent(UpPlanService.this,
UpLocationService.class));
System.out
.println("update sucess, service is running ,start it");
writeFile
.writeToFile("update sucess, service is running ,start it");
startService(new Intent(UpPlanService.this,
UpLocationService.class));
} else {
System.out
.println("update sucess, service not running ,start it");
writeFile
.writeToFile("update sucess, service not running ,start it");
startService(new Intent(UpPlanService.this,
UpLocationService.class));
}
} else {
if (!myApp.isServiceRunning()) {
System.out
.println("update fail, service not running ,start it");
writeFile
.writeToFile("update fail, service not running ,start it");
startService(new Intent(UpPlanService.this,
UpLocationService.class));
}
}
isUpdateIng = false;
super.onPostExecute(result);
}
@Override
protected PDResult doInBackground(Context... params) {
PDResult ret = new PDResult();
ret.isSucess = false;
Log.e("isUpdateIng", isUpdateIng+"");
if (! isUpdateIng) {
isUpdateIng = true;
writeFile.writeToFile("与服务器交互,更新终端任务参数");
boolean circle = true;
String result = "-1";
int i = 1;
// 取出IMSI号
System.out.println("get imsi");
tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
imsi = tm.getSubscriberId(); // 取出现在的IMSI号码
if(imsi==null){
imsi="000000000000000";
}
System.out.println("get imsi is over");
JSONObject obj = new JSONObject();
try {
obj.put("gguid", shareFile.getDataFromPres("GGUID"));
obj.put("guid", shareFile.getDataFromPres("GUID"));
obj.put("username", shareFile.getDataFromPres("REGSIM"));
obj.put("password", shareFile.getDataFromPres("PWD"));
obj.put("imsi", imsi);
obj.put("zdlx", myApp.getVersion());
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
log = "上传至服务器的交互参数:" + obj.toString();
Log.i(TAG, log);
writeFile.writeToFile(log);
server = new UpdataToServer(UpPlanService.this);
while (circle) {
result = server.dataToServer("JCLXSB", obj);
Log.e("获取任务", obj.toString());
log = "请求服务器发送连接请求次数,与服务器交互结果:" + i + "," + result;
Log.i(TAG, log);
writeFile.writeToFile(log);
if (result.equals("-1") || result.equals("500")) {
writeFile.writeToFile("第" + i + "次与服务器交互失败");
if (i == 3) {
circle = false;
} else {
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i++;
}
} else {
circle = false;
}
}
Log.i(TAG, "与服务器交互更新结果:" + result);
writeFile.writeToFile("与服务器交互更新结果:" + result);
String timeTemp = "";
if (!result.equals("-1") && !result.equals("500")) {// 交互成功
try {
JSONObject taskobj = new JSONObject(result);
Log.e("taskobj", taskobj.toString());
String res = taskobj.getString("result");
serverTime = taskobj.getString("time");
log = "与服务器交互成功,交互时间:" + serverTime;
writeFile.writeToFile(log);
int param = Integer.valueOf(res).intValue();
switch (param) {
case 0:// 更新任务参数
JSONObject taskObj = taskobj
.getJSONObject("tasks");
shareFile = new Optsharepre_interface(
UpPlanService.this);
shareFile.editPres("SBSJ",
taskObj.getString("ontime"));
shareFile.editPres("XBSJ",
taskObj.getString("offtime"));
shareFile.editPres("JGSJ",
taskObj.getString("intervaltime"));
shareFile.editPres("RWZL",
taskObj.getString("execute"));
shareFile.recrodUpdatePlanTime(JqydDateUtil
.getDateDayTwo(new Date()));
log = "与服务器交互成功,更新终端保存的任务参数";
writeFile.writeToFile(log);
break;
case -999:
shareFile.editPres("SBSJ", "-2");
shareFile.editPres("XBSJ", "-2");
shareFile.editPres("JGSJ", "-2");
shareFile.editPres("RWZL", "-2");
log = "鉴权失败,删除终端保存的任务参数";
writeFile.writeToFile(log);
break;
case 1:// 删除终端数据
shareFile.editPres("SBSJ", "-2");
shareFile.editPres("XBSJ", "-2");
shareFile.editPres("JGSJ", "-2");
shareFile.editPres("RWZL", "-2");
log = "执行删除终端保存的任务参数指令";
writeFile.writeToFile(log);
break;
}
} catch (JSONException e) {
e.printStackTrace();
}
isSuccess = true;
ret.isSucess = true;
timeTemp = serverTime;
} else {// 更新失败,取前一天上报指令
log = "由于网络或服务器问题造成与后台交互失败,此时取昨天的任务指令执行";
// 采用手机端时间
log += ",手机端时间:" + JqydDateUtil.getHourMin(new Date());
writeFile.writeToFile(log);
ret.isSucess = false;
}
// 与服务器交互完毕后,更新当前的全局时间变量
String[] serverTim = timeTemp.split(":");
int currHour = 0;
int currMin = 0;
try {
currHour = Integer.parseInt(serverTim[0]);
currMin = Integer.parseInt(serverTim[1]);
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
writeFile.writeToFile("与服务器交互完毕后,解析服务器端时间出现异常");
}
currTime = currHour * 60 + currMin;
log = "与服务器任务交互完成后,记录从服务器端获取的时间:" + currHour + ":"
+ currMin;
Log.i(TAG, log);
writeFile.writeToFile(log);
}
return ret;
}
};
task.execute(UpPlanService.this);
}
}