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