package com.jiuqi.njt.service; import java.util.ArrayList; import java.util.Date; import java.util.List; import android.app.AlarmManager; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.IBinder; import android.text.format.DateUtils; import com.jiuqi.lbsinterface.bean.UserPositionBean; import com.jiuqi.lbsinterface.manager.IPositionManager; import com.jiuqi.mobile.nigo.comeclose.utils.StringUtils; import com.jiuqi.mobile.nigo.comeclose.ws.client.LBSClientContext; import com.jiuqi.njt.data.MyApp; import com.jiuqi.njt.data.OptsharepreInterface; import com.jiuqi.njt.register.city.DataUserPositionBean; import com.jiuqi.njt.register.city.UplocationUtil; import com.jiuqi.njt.register.city.UserPositionDBUtil; import com.jiuqi.njt.update.Config; import com.jiuqi.njt.util.ArrayUtil; import com.jiuqi.njt.util.Constants; import com.jiuqi.njt.util.UIUtil; import com.jqyd.android.module.lbs.util.JqydDateUtil; import com.jqyd.android.module.lbs.util.WriteFile; /** * 重传服务 * @author * */ public class RetransmissionService extends Service { // private final String TAG = this.getClass().getName(); private Context context = this; private AlarmManager am; private PendingIntent pi; private MyApp application = null; private OptsharepreInterface sharePre; private UserPositionDBUtil userPositionDBUtil; private Config config ; private WriteFile file; @Override public void onCreate() { userPositionDBUtil = new UserPositionDBUtil(context); sharePre = new OptsharepreInterface(context); application = (MyApp)getApplication(); config = new Config(); am = (AlarmManager) getSystemService(ALARM_SERVICE); Intent serviceIntent = new Intent(RetransmissionService.this, RetransmissionService.class); pi = PendingIntent.getService(RetransmissionService.this, 0, serviceIntent, 0); // long interval = DateUtils.MINUTE_IN_MILLIS * 60 * 1;// 60分钟一次 long interval = DateUtils.MINUTE_IN_MILLIS * 3; long firstWake = System.currentTimeMillis() + interval; am.setRepeating(AlarmManager.RTC, firstWake, interval, pi); file= new WriteFile("RetransmissionServiceLog"+JqydDateUtil.getDateDayOne(new Date())); file.writeToFile("RetransmissionService-------------" + "onCreate()"); super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { upData(); file.writeToFile("RetransmissionService-------------onStartCommand"); return super.onStartCommand(intent, flags, startId); } @Override public IBinder onBind(Intent intent) { return null; } private void upData() { class PDResult { boolean isSucess; } AsyncTask<Context, Void, PDResult> task = new AsyncTask<Context, Void, PDResult>() { private List<DataUserPositionBean> dataList; @Override protected void onPreExecute() { dataList = userPositionDBUtil.queryAllUserPosition(); super.onPreExecute(); } @Override protected PDResult doInBackground(Context... params) { PDResult ret = new PDResult(); ret.isSucess = false; try { String sleeptime = StringUtils.getRandom(4); try { Thread.sleep(UIUtil.tryToLong(sleeptime)); } catch (InterruptedException e) { e.printStackTrace(); } IPositionManager position = null; LBSClientContext context = application.getLbsClientContext(); if(context==null){ context = LBSClientContext.getClientContext(Constants.LBS_SERVER_URL); application.setLbsClientContext(context); } position = context.getManager(IPositionManager.class); if(dataList!=null && dataList.size()>0){ getData(position, dataList); }else{ file.writeToFile("RetransmissionService-------------没有要上传的数据"); } } catch (Exception e) { file.writeToFile("RetransmissionService-------------上报有异常"); e.printStackTrace(); } return ret; } }; task.execute(RetransmissionService.this); } private void getData(IPositionManager position,List<DataUserPositionBean> dataList) throws com.jiuqi.lbsinterface.exception.NiGoException { List<List<DataUserPositionBean>> beanList = ArrayUtil.splitList(dataList, 20); String version = config.getVerName(context); for (List<DataUserPositionBean> list : beanList) { final List<UserPositionBean> beans = new ArrayList<UserPositionBean>(); for (DataUserPositionBean dataUserPositionBean : list) { UserPositionBean b = UplocationUtil.convertToUserPositionBean(dataUserPositionBean); b.setVersion(version); beans.add(b); } position.add(beans.toArray(new UserPositionBean[beans.size()])); userPositionDBUtil.deleteUserPositionList(list); file.writeToFile("RetransmissionService-------------updataposition--" + list.size()+"条"); } } @Override public void onDestroy() { file.writeToFile("RetransmissionService-------------" + "onDestroy()"); super.onDestroy(); } }