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