百度Android 定位SDK示例

LBS(Location Based Service)是互联网时代的热点,在本地搜索、定向广告、社交网络等众多领域得到了广泛应用。其核心基础,就是定位能力,为各类应用提供位置信息。百度移动定位API是一个提供基础定位API的第三方平台,为各类应用提供定位能力,提升用户体验。
百度地图定位SDK免费对外开放,无需申请key。

百度地图定位SDK目前只支持Android和Symbian两大平台,其他平台产品正在计划开发中。

定位SDK可以从 百度地图api官网 下载,具体文档可以参考官方文档,这里不详述。


示例代码

MyApp.java

package com.yulore.baidupoi;

import android.app.Application;
import android.util.Log;
import android.widget.TextView;

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

public class MyApp extends Application {
	
	public static final String TAG = "MyApp";
	public LocationClient mLocationClient;
	public TextView tv_result;
	public MyLocationListenner myListener = new MyLocationListenner();
	@Override
	public void onCreate() {
		
		mLocationClient = new LocationClient(this);
		
		mLocationClient.registerLocationListener(myListener);
	}
	
	/**
	 * 监听函数,又新位置的时候,格式化成字符串,输出到屏幕中
	 */
	public class MyLocationListenner implements BDLocationListener {

		@Override
		public void onReceiveLocation(BDLocation location) {
			if (location == null)
				return ;
			
			StringBuffer sb = new StringBuffer(256);
			sb.append("time : ");
			sb.append(location.getTime());
			sb.append("\nerror code : ");
			sb.append(location.getLocType());
			sb.append("\nlatitude : ");
			sb.append(location.getLatitude());
			sb.append("\nlontitude : ");
			sb.append(location.getLongitude());
			sb.append("\nradius : ");
			sb.append(location.getRadius());
			if (location.getLocType() == BDLocation.TypeGpsLocation){
				sb.append("\nspeed : ");
				sb.append(location.getSpeed());
				sb.append("\nsatellite : ");
				sb.append(location.getSatelliteNumber());
			} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){
				sb.append("\n省:");
				sb.append(location.getProvince());
				sb.append("\n市:");
				sb.append(location.getCity());
				sb.append("\n区/县:");
				sb.append(location.getDistrict());
				sb.append("\naddr : ");
				sb.append(location.getAddrStr());
			}
			sb.append("\nsdk version : ");
			sb.append(mLocationClient.getVersion());
			sb.append("\nisCellChangeFlag : ");
			sb.append(location.isCellChangeFlag());
			
			setAddress(sb.toString());
			
			Log.e(TAG, sb.toString());
		}

		@Override
		public void onReceivePoi(BDLocation poiLocation) {
			if (poiLocation == null){
				return ; 
			}
			
			StringBuffer sb = new StringBuffer(256);
			sb.append("Poi time : ");
			sb.append(poiLocation.getTime());
			sb.append("\nerror code : "); 
			sb.append(poiLocation.getLocType());
			sb.append("\nlatitude : ");
			sb.append(poiLocation.getLatitude());
			sb.append("\nlontitude : ");
			sb.append(poiLocation.getLongitude());
			sb.append("\nradius : ");
			sb.append(poiLocation.getRadius());
			if (poiLocation.getLocType() == BDLocation.TypeNetWorkLocation){
				sb.append("\naddr : ");
				sb.append(poiLocation.getAddrStr());
			} 
			if(poiLocation.hasPoi()){
				sb.append("\nPoi:");
				sb.append(poiLocation.getPoi());
			}else{				
				sb.append("noPoi information");
			}
			
			setAddress(sb.toString());
			
			Log.e(TAG, sb.toString());
		}
	}
	
	private void setAddress(String text) {
		if(text!=null){
			if(tv_result!=null){
				tv_result.setText(text);
			}
		}
	}

}


MainActivity.java

package com.yulore.baidupoi;

import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;

import android.app.Activity;
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 implements OnClickListener {

	private Button bt_poi;
	private Button bt_start;
	private TextView tv_result;
	private boolean isStart;
	private LocationClient mLocationClient;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		findViewById();

		mLocationClient = ((MyApp) getApplication()).mLocationClient;
		((MyApp) getApplication()).tv_result = tv_result;

		setListener();
	}

	private void findViewById() {
		bt_poi = (Button) findViewById(R.id.bt_poi);
		bt_start = (Button) findViewById(R.id.bt_start);
		tv_result = (TextView) findViewById(R.id.tv_result);
	}

	private void setListener() {
		bt_start.setOnClickListener(this);
		bt_poi.setOnClickListener(this);
	}

	private void setLocationOption() {
		LocationClientOption option = new LocationClientOption();
		option.setOpenGps(false); 	// 设置是否打开gps,使用gps前提是用户硬件打开gps。默认是不打开gps的
		option.setCoorType("bd09ll"); 	// 设置返回值的坐标类型
		option.setServiceName("com.baidu.location.service_v2.9");
		option.setAddrType("all");	// 设置是否要返回地址信息,默认为无地址信息
		option.setScanSpan(3000);	// 设置定时定位的时间间隔。单位ms
		option.setPriority(LocationClientOption.NetWorkFirst); 	// 设置网络优先
//		option.setPoiNumber(10); 	// 设置最多可返回的POI个数,默认值为3
//		option.setPoiExtraInfo(false); 	// 设置是否需要POI的电话地址等详细信息:
//		option.setPoiDistance(500);		//设置查询范围,默认值为500,即以当前定位位置为中心的半径大小
		option.disableCache(true); 		// 设置是否启用缓存定位.true表示禁用缓存定位,false表示启用缓存定位。
		
		mLocationClient.setLocOption(option);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.bt_start:

			if(!isStart){
				setLocationOption();
				mLocationClient.start();
				bt_start.setText("停止");
				isStart = true;
			}else{
				mLocationClient.stop();
				bt_start.setText("开始");
				isStart = false;
			}
			
			break;
		case R.id.bt_poi:

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

		default:
			break;
		}
	}
	
	@Override
	protected void onStop() {
		mLocationClient.stop();
		super.onStop();
	}
}


布局文件main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tv_result"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
    
    <Button
        android:id="@+id/bt_start"
        android:layout_width="100dip"
        android:layout_height="50dip"
        android:text="@string/start_loc" >
    </Button>

    <Button
        android:id="@+id/bt_poi"
        android:layout_width="100dip"
        android:layout_height="wrap_content"
        android:text="@string/loc" >
    </Button>

</LinearLayout>


运行结果






评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值