android使用Broadcast的一个例子

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

}

该示例是好友“湖南★废〤譃”提供,在这里收藏一下。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值