百度定位实例---采集数据,上传数据

需求:客户端每隔5分钟采集定位坐标数据,发送到服务器。

1、导入jar包,locSDK_4.2.jar

2、在mainfest中加入权限和服务声明

    <!-- 百度定位 -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.READ_LOGS" >
    </uses-permission>
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
服务及在百度开发者中心接入应用后得到的API——KEY

        <!-- 百度定位 -->
                <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
            <intent-filter>
                <action android:name="com.baidu.location.service_v2.2" >
                </action>
            </intent-filter>
        </service>

        <!-- meta-data需要写在application中 -->
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="8888888888888888888" />
3、创建服务Service

使用百度定位,获取定位坐标数据,可以选择定位模式和坐标系,我使用了高精度和bd09ll百度加密经纬度的坐标系

	// 定位模式,默认 高精度 其他:LocationMode.Battery_Saving低功耗
	// LocationMode.Device_Sensors仅设备
	private final LocationMode tempMode = LocationMode.Hight_Accuracy;
	// 坐标系,默认bd09ll百度加密经纬度 其他:gcj02国测局 bd09百度加密墨卡托坐标
	private final String tempcoor = "bd09ll";
<span style="white-space:pre">	BDLocation location;</span>
然后在onBind()中启动百度定位

		//百度定位
		mLocationClient = new LocationClient(this.getApplicationContext());
		mMyLocationListener = new MyLocationListener();//监听器
		mLocationClient.registerLocationListener(mMyLocationListener);
		InitLocation();//初始化
		mLocationClient.start();
初始化方法

	private void InitLocation(){
		LocationClientOption option = new LocationClientOption();
		option.setLocationMode(tempMode);//设置定位模式
		option.setCoorType(tempcoor);//返回的定位结果是百度经纬度,默认值gcj02
		int span=5000;//定位时间间隔     ms
		option.setScanSpan(span);//设置发起定位请求的间隔时间
		option.setIsNeedAddress(true);//是否反地理编码
		mLocationClient.setLocOption(option);
	}
监听器,初始化定位对象

需求只需要采集上传,没用到监听器。如果有用户到了某个地理位置进行提醒这种需求,可以使用监听器。

	public class MyLocationListener implements BDLocationListener {

		@Override
		public void onReceiveLocation(BDLocation location) {
			//Receive Location 
			if(location!=null){
<span style="white-space:pre">				location=location;</span>
			}
		}


	}

下面是服务中的定位采集方法

	/**
	 * 采集定位信息存到数据库
	 * 
	 */
	public void getLBSLocationAction() {
		final String systemUserId = sp.getString(Constants.SYSTEM_USER_ID, "");
		ScheduledExecutorService es = Executors.newScheduledThreadPool(1);
		es.scheduleAtFixedRate(new Runnable() {
			
			@Override
			public void run() {
					mLocationClient.requestLocation();
					long timeSystem=System.currentTimeMillis();
					String submitTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(timeSystem));
					if(location!=null){
						System.out.println(submitTime);
						DataForLBSLocationBean dataForLBSLocationBean=new DataForLBSLocationBean();
						dataForLBSLocationBean.setUserId(systemUserId);
						dataForLBSLocationBean.setProjectId(projectId);
						dataForLBSLocationBean.setLongitude(String.valueOf(location.getLongitude()));
						dataForLBSLocationBean.setLatitude(String.valueOf(location.getLatitude()));
						dataForLBSLocationBean.setCurrentTime(submitTime);
						
						if(appDbHelper.isTimeExist(dataForLBSLocationBean.getUserId(),dataForLBSLocationBean.getCurrentTime())){
							
						}else{
							appDbHelper.saveLBSLocationData(dataForLBSLocationBean);
						}
					}
					long timeSystemSecond=System.currentTimeMillis();
					String submitTime2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(timeSystemSecond));
				}
		}, 0, 300*1000, TimeUnit.MILLISECONDS);
		
	}
然后使用定时线程池以同样的方式向服务器发送数据。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值