package com.siqing.hdgcarclient.server;
import com.baidu.mapapi.BMapManager;
import com.siqing.hdgcarclient.core.AppContext;
import com.siqing.hdgcarclient.core.CarClientApplication;
import com.siqing.hdgcarclient.core.Config;
import com.siqing.hdgcarclient.core.RequestParaBuilder;
import com.siqing.hdgcarclient.model.common.GpsPoint;
import com.siqing.hdgcarclient.model.input.RequestPara;
import com.siqing.hdgcarclient.service.GeneralService;
import com.siqing.hdgcarclient.utils.GpsUtil;
import com.siqing.hdgcarclient.utils.GpsUtil.LocInfo;
import com.siqing.hdgcarclient.utils.LogUtil;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.os.AsyncTask;
import android.os.Bundle;
public class LocateServer extends BroadcastReceiver {
private static String TAG = "LocateServer";
Context mcontext;
GpsUtil gpsUtil;
@Override
public void onReceive(Context context, Intent intent) {
// LogUtil.e(TAG, "获取当前坐标");
mcontext=context;
new LocateTask().execute();
}
public void startLocateServer(Context context) {
//1.判断app是否已经初始化及
// CarClientApplication app=(CarClientApplication) context.getApplicationContext();
// if(!app.readAppContext().isInitialization() || !app.readAppContext().isBindCar())return;
AppContext appContext=AppContext.getInstance(context);
if(!appContext.isInitialization() || !appContext.isBindCar())return;
Intent intent = new Intent(context, LocateServer.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
long firstime = System.currentTimeMillis() + 5000;
AlarmManager am = (AlarmManager) context
.getSystemService(context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, firstime, Config.RefreshLocTime, sender);
}
public void stopLocateServer(Context context) {
Intent intent = new Intent(context, LocateServer.class);
PendingIntent sender = PendingIntent
.getBroadcast(context, 0, intent, 0);
AlarmManager alarm = (AlarmManager) context
.getSystemService(context.ALARM_SERVICE);
alarm.cancel(sender);
}
class LocateTask extends AsyncTask<Void, Void, LocInfo> {
@Override
protected void onPostExecute(LocInfo result) {
super.onPostExecute(result);
Intent intent1 = new Intent();
intent1.setAction(Config.GPS_REFRESH);
intent1.putExtra("point-lng",result.lng);
intent1.putExtra("point-lat",result.lat);
intent1.putExtra("point-dir", result.dir);
// Bundle bundle = new Bundle();
// bundle.putSerializable("point", result);
// intent1.putExtras(bundle);
mcontext.sendBroadcast(intent1);
}
@Override
protected LocInfo doInBackground(Void... params) {
CarClientApplication app = (CarClientApplication)mcontext.getApplicationContext();
if (app.gpsUtil == null) {
LogUtil.e(TAG, "error!");
}
LocInfo locinfo= app.gpsUtil.getLocation();
if(locinfo==null)
{
LogUtil.e(TAG, "获取gps坐标失败!");
}
else
{
Config.number++;
if(Config.number==8){
Config.number=0;
}
if(Config.number==0){
Location gpsloc=app.gpsUtil.getGpsLocation();
GpsPoint gpsPoint=new GpsPoint();
gpsPoint.blng=locinfo.lng;
gpsPoint.blat=locinfo.lat;
if(gpsloc!=null)
{
gpsPoint.lng=gpsloc.getLongitude();
gpsPoint.lat=gpsloc.getLatitude();
}
AppContext appContext= AppContext.getInstance(mcontext);
appContext.setGpsPoint(gpsPoint);
//AppContext.setAppContext(mcontext, appContext);
appContext.saveToDb();
if(appContext.isNeedPostGps())
{
//提交至服务器
RequestPara<GpsPoint> para=new RequestPara<GpsPoint>() {};
RequestParaBuilder.Builder(para,mcontext);
para.data=gpsPoint;
GeneralService.CarReportGps(para);
}
}
}
return locinfo;
}
}
}
该示例是好友“湖南★废〤譃”提供,在这里收藏一下。