基于百度地图实现的实时定位功能(含项目代码)

这段时间经常接触百度地图API,每次用的时候都会重新下demo,确实浪费时间。今天有时候就整理一下代码。博文底部有项目代码链接。

以下贴出来的是百度的定位功能的实现:
先看看效果:


MyApplication.class:
package com.liucanwen.baidulocation;

import android.app.Application;
import android.content.Intent;
import android.os.Process;
import android.util.Log;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.GeofenceClient;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;

public class MyApplication extends Application
{
	public LocationClient mLocationClient = null;
	public GeofenceClient mGeofenceClient;
	public MyLocationListenner myListener = new MyLocationListenner();
	public static String TAG = "MyApplication";
	
	private static MyApplication mInstance = null;

	@Override
	public void onCreate()
	{
		mInstance = this;
		
		mLocationClient = new LocationClient(this);

		/**
		 * 项目的key,自己到官网申请 http://lbsyun.baidu.com/apiconsole/key
		 */
		mLocationClient.setAK("0zY5wx1STQSzyaNv4Tvr7z0R");
		mLocationClient.registerLocationListener(myListener);
		mGeofenceClient = new GeofenceClient(this);

		super.onCreate();
		Log.d(TAG, "... Application onCreate... pid=" + Process.myPid());
	}
	
	public static MyApplication getInstance()
	{
		return mInstance;
	}

	/**
	 * 停止定位
	 */
	public void stopLocationClient()
	{
		if (mLocationClient != null && mLocationClient.isStarted())
		{
			mLocationClient.stop();
		} 
	}

	/**
	 * 发起定位
	 */
	public void requestLocationInfo()
	{
		setLocationOption();
		
		if (mLocationClient != null && !mLocationClient.isStarted())
		{
			mLocationClient.start();
		}

		if (mLocationClient != null && mLocationClient.isStarted())
		{
			mLocationClient.requestLocation();
		} 
	}

	/**
	 *  设置相关参数
	 */
	private void setLocationOption()
	{
		LocationClientOption option = new LocationClientOption();
		option.setOpenGps(true); // 打开gps
		option.setCoorType("bd09ll"); // 设置坐标类型
		option.setServiceName("com.baidu.location.service_v2.9");
		option.setPoiExtraInfo(true);
		option.setAddrType("all");
		option.setPoiNumber(10);
		option.disableCache(true);
		mLocationClient.setLocOption(option);
	}

	/**
	 * 监听函数,有更新位置的时候,格式化成字符串,输出到屏幕中
	 */
	public class MyLocationListenner implements BDLocationListener
	{
		@Override
		public void onReceiveLocation(BDLocation location)
		{
			if (location == null)
			{
				sendBroadCast("定位失败!");
				return;
			}
			sendBroadCast(location.getAddrStr());
		}

		public void onReceivePoi(BDLocation poiLocation)
		{
			if (poiLocation == null)
			{
				sendBroadCast("定位失败!");
				return;
			}
			sendBroadCast(poiLocation.getAddrStr());
		}
		
	}
	
	/**
	 * 得到发送广播
	 * @param address
	 */
	public void sendBroadCast(String address)
	{
		stopLocationClient();
		
		Intent intent = new Intent(MainActivity.LOCATION_BCR);
		intent.putExtra("address", address);
		sendBroadcast(intent);
	}
}


MainActivity.class:
package com.liucanwen.baidulocation;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity
{
	private BroadcastReceiver broadcastReceiver;
	public static String LOCATION_BCR = "location_bcr";
	
	private Button locBtn;
	private TextView locInfo;

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		initialize();
		
		initializeViews();
		
		initializeListeners();
	}

	private void initialize()
	{
		registerBroadCastReceiver();
	}
	
	private void initializeViews()
	{
		locBtn = (Button) findViewById(R.id.location);
		locInfo = (TextView) findViewById(R.id.location_info);
	}
	
	private void initializeListeners()
	{
		locBtn.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				locInfo.setText("定位中...");
				
				MyApplication.getInstance().requestLocationInfo();
			}
		});
	}

	/**
	 * 注册一个广播,监听定位结果
	 */
	private void registerBroadCastReceiver()
	{
		broadcastReceiver = new BroadcastReceiver()
		{
			@Override
			public void onReceive(Context context, Intent intent)
			{
				String address = intent.getStringExtra("address");
				
				locInfo.setText(address);
			}
		};
		IntentFilter intentToReceiveFilter = new IntentFilter();
		intentToReceiveFilter.addAction(LOCATION_BCR);
		registerReceiver(broadcastReceiver, intentToReceiveFilter);
	}
	
	@Override
	protected void onDestroy()
	{
		super.onDestroy();
		unregisterReceiver(broadcastReceiver);
	}

}


源代码下载:
http://download.csdn.net/detail/qq15989177612/6930569

猜你喜欢

转载自liucanwen.iteye.com/blog/2018349