基于百度地图的GPS简单定位——详细注释
由于开发需要,简单学习了基于百度地图的GPS定位,实现了获取当地经纬度及详细地址。并附有官方demo。需要注意的是,必须先注册百度开发者账号,(http://developer.baidu.com),然后获取API Key (http://developer.baidu.com/map/index.php?title=android-locsdk)。将获得的API Key写入AndroidManifest.xml文件。
先来看效果图:
工程目录如下:(注意导入libs,由于空间有限,布局文件没显示,分别为activity_main.xml和location.xml)
具体代码如下:
1、MainActivity.java
package com.android.baidugps;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
public class MainActivity extends Activity {
private static final String TAG = "BaiduGPS";
private TextView locationInfoTextView = null;
private TextView latitudeTextView = null;
private TextView longitudeTextView = null;
private Button startButton , secondButton;
private LocationClient mLocationClient = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
*
*
*/
secondButton = (Button)findViewById(R.id.secondActivity);
secondButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(MainActivity.this, MyActivityTest.class);
startActivity(i);
}
});
locationInfoTextView = (TextView) this.findViewById(R.id.addrText);
latitudeTextView = (TextView) this.findViewById(R.id.latiText);
longitudeTextView = (TextView) this.findViewById(R.id.longText);
startButton = (Button) this.findViewById(R.id.getButton);
mLocationClient = ((LocationApplication)getApplication()).mLocationClient;
((LocationApplication)getApplication()).mLocationResult = locationInfoTextView;
// mLocationClient = new LocationClient(this);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型,总共有几个类型具体的可以查看百度文档说明
option.setScanSpan(20000); // 设置定位间隔时间
option.setAddrType("all"); // 设置返回类型,all = 表示返回所有的数据
option.setProdName("施肥专家"); //设置产品线名称。
//强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。
// option.setPriority(LocationClientOption.NetWorkFirst);
mLocationClient.setLocOption(option);
mLocationClient.registerLocationListener(new BDLocationListener() {
@Override
public void onReceiveLocation(BDLocation location) {
if(location == null)
return;
Log.i(TAG, "定位当前位置成功!");
String city = location.getAddrStr();
System.out.println(TAG + location.getStreet()); //街道
System.out.println(TAG+ location.getStreetNumber());
System.out.println(TAG + location.getAddrStr()); //完整地址
System.out.println(TAG + location.getAltitude());
System.out.println(TAG + location.getCity());
System.out.println(TAG + location.getCityCode());
System.out.println(TAG + location.getCoorType());
// System.out.println(TAG + location.getDerect());
System.out.println(TAG + location.getDistrict()); //地区
System.out.println(TAG + location.getProvince());
System.out.println(TAG + location.getSatelliteNumber());
System.out.println(TAG + location.getSpeed());
// String ownerLocation = location.getAddrStr();
String ownerLatitude = String.valueOf(location.getLatitude());
String ownerLongtitude = String.valueOf(location.getLongitude());
locationInfoTextView.setText("城市:" + city);
latitudeTextView.setText("纬度为:" + ownerLatitude);
longitudeTextView.setText("经度为:" + ownerLongtitude);