百度地图实时获取当前位置坐标并实时定位
2014-06-06 14:03
579 查看
废话不多说 , 直接上源码 。(希望各位顶一下,想要点积分。。。)
1.配置:
配置:
2.添加各种权限,各种权限,请参考百度官方指南。其中有一个service,尤其要注意添加 。
(测试的时候,最好在真机上进行测试。)
3贴代码喽
package scu.com.app;
import java.util.Map;
import org.xml.sax.helpers.LocatorImpl;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.BDNotifyListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.BMapManager;
import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;
import com.baidu.mapapi.*;
import com.baidu.mapapi.map.LocationData;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;
public class MapActivity extends Activity{
private static final String TAG = "TAG" ;
private BMapManager mBMapManager = null;
private MapView mMapView = null;
//获取地点位置信息
private LocationClient locationClient = null;
private BDLocationListener bdLocationListener = new MyLocationListener();
//定位到当前位置
private MyLocationOverlay myLocationOverlay = null;
private LocationData locationData = null;
Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
Toast.makeText(getApplicationContext(), "msg:" +msg.what, Toast.LENGTH_SHORT).show();
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBMapManager = new BMapManager(getApplication());
mBMapManager.init(this.getString(R.string.mapKey), null);
mBMapManager.start() ;
//注意:请在试用setContentView前初始化BMapManager对象,否则会报错
setContentView(R.layout.map);
mMapView=(MapView)findViewById(R.id.mapView);
//设置启用内置的缩放控件
mMapView.setBuiltInZoomControls(true);
// 得到mMapView的控制权,可以用它控制和驱动平移和缩放
MapController mMapController = mMapView.getController();
locationClient = new LocationClient(getApplicationContext());
locationClient.registerLocationListener(bdLocationListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); //是否打开GPRS
option.setAddrType("all");//返回的定位结果包含地址信息
option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(50000);//设置发起定位请求的间隔时间为5000ms
option.disableCache(true);//禁止启用缓存定位
option.setPoiNumber(5); //最多返回POI个数
option.setPoiDistance(1000); //poi查询距离
option.setPriority(LocationClientOption.NetWorkFirst);
locationClient.setLocOption(option);
locationClient.start();
if(locationClient!=null && locationClient.isStarted()){
locationClient.requestLocation() ;
locationClient.requestPoi() ;
}else {
Log.d(TAG, "locClient is null or not started");
}
//设置地图zoom级别
mMapController.setZoom(12);
myLocationOverlay = new MyLocationOverlay(mMapView);
locationData = new LocationData() ;
myLocationOverlay.setData(locationData);
mMapView.getOverlays().add(myLocationOverlay);
myLocationOverlay.enableCompass();
mMapView.refresh();
}
@Override
protected void onStart() {
locationClient.start() ;
super.onStart();
}
@Override
protected void onStop() {
locationClient.stop() ;
super.onStop();
}
@Override
protected void onDestroy(){
mMapView.destroy();
locationClient.unRegisterLocationListener(bdLocationListener) ;
if(mBMapManager!=null){
mBMapManager.destroy();
mBMapManager=null;
}
locationClient.stop() ;
myLocationOverlay.disableCompass() ;
myLocationOverlay = null;
mMapView = null;
locationClient = null;
locationData = null;
super.onDestroy();
}
@Override
protected void onPause(){
mMapView.onPause();
if(mBMapManager!=null){
mBMapManager.stop();
}
locationClient.stop() ;
super.onPause();
}
@Override
protected void onResume(){
mMapView.onResume();
if(mBMapManager!=null){
mBMapManager.start();
}
locationClient.start() ;
super.onResume();
}
// 获取当前位置信息的类
private class MyLocationListener implements BDLocationListener{
@Override
public void onReceiveLocation(BDLocation position) {
// Log.v(TAG, "onReceiveLocation--->getLatitude--->"+String.valueOf(position.getLatitude())) ;
// Log.v(TAG, "onReceiveLocation--->getLocType--->"+String.valueOf(position.getLongitude())) ;
// Log.v(TAG, "onReceiveLocation--->getRadius--->"+String.valueOf(position.getRadius())) ;
// Log.v(TAG, "onReceiveLocation--->position--->"+String.valueOf(position.getAddrStr())) ;
locationData.latitude = position.getLatitude();
locationData.longitude = position.getLongitude();
locationData.accuracy = position.getRadius();
locationData.direction = position.getDerect();
myLocationOverlay.setData(locationData);
mMapView.refresh();
mMapView.getController().animateTo(new GeoPoint((int)(locationData.latitude* 1e6), (int)(locationData.longitude * 1e6)), mHandler.obtainMessage(1));
}
@Override
public void onReceivePoi(BDLocation position) {
//这个函数貌似没有什么大的作用 。
}
}
}
1.配置:
配置:
2.添加各种权限,各种权限,请参考百度官方指南。其中有一个service,尤其要注意添加 。
(测试的时候,最好在真机上进行测试。)
3贴代码喽
package scu.com.app;
import java.util.Map;
import org.xml.sax.helpers.LocatorImpl;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.BDNotifyListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.BMapManager;
import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;
import com.baidu.mapapi.*;
import com.baidu.mapapi.map.LocationData;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;
public class MapActivity extends Activity{
private static final String TAG = "TAG" ;
private BMapManager mBMapManager = null;
private MapView mMapView = null;
//获取地点位置信息
private LocationClient locationClient = null;
private BDLocationListener bdLocationListener = new MyLocationListener();
//定位到当前位置
private MyLocationOverlay myLocationOverlay = null;
private LocationData locationData = null;
Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
Toast.makeText(getApplicationContext(), "msg:" +msg.what, Toast.LENGTH_SHORT).show();
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBMapManager = new BMapManager(getApplication());
mBMapManager.init(this.getString(R.string.mapKey), null);
mBMapManager.start() ;
//注意:请在试用setContentView前初始化BMapManager对象,否则会报错
setContentView(R.layout.map);
mMapView=(MapView)findViewById(R.id.mapView);
//设置启用内置的缩放控件
mMapView.setBuiltInZoomControls(true);
// 得到mMapView的控制权,可以用它控制和驱动平移和缩放
MapController mMapController = mMapView.getController();
locationClient = new LocationClient(getApplicationContext());
locationClient.registerLocationListener(bdLocationListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); //是否打开GPRS
option.setAddrType("all");//返回的定位结果包含地址信息
option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(50000);//设置发起定位请求的间隔时间为5000ms
option.disableCache(true);//禁止启用缓存定位
option.setPoiNumber(5); //最多返回POI个数
option.setPoiDistance(1000); //poi查询距离
option.setPriority(LocationClientOption.NetWorkFirst);
locationClient.setLocOption(option);
locationClient.start();
if(locationClient!=null && locationClient.isStarted()){
locationClient.requestLocation() ;
locationClient.requestPoi() ;
}else {
Log.d(TAG, "locClient is null or not started");
}
//设置地图zoom级别
mMapController.setZoom(12);
myLocationOverlay = new MyLocationOverlay(mMapView);
locationData = new LocationData() ;
myLocationOverlay.setData(locationData);
mMapView.getOverlays().add(myLocationOverlay);
myLocationOverlay.enableCompass();
mMapView.refresh();
}
@Override
protected void onStart() {
locationClient.start() ;
super.onStart();
}
@Override
protected void onStop() {
locationClient.stop() ;
super.onStop();
}
@Override
protected void onDestroy(){
mMapView.destroy();
locationClient.unRegisterLocationListener(bdLocationListener) ;
if(mBMapManager!=null){
mBMapManager.destroy();
mBMapManager=null;
}
locationClient.stop() ;
myLocationOverlay.disableCompass() ;
myLocationOverlay = null;
mMapView = null;
locationClient = null;
locationData = null;
super.onDestroy();
}
@Override
protected void onPause(){
mMapView.onPause();
if(mBMapManager!=null){
mBMapManager.stop();
}
locationClient.stop() ;
super.onPause();
}
@Override
protected void onResume(){
mMapView.onResume();
if(mBMapManager!=null){
mBMapManager.start();
}
locationClient.start() ;
super.onResume();
}
// 获取当前位置信息的类
private class MyLocationListener implements BDLocationListener{
@Override
public void onReceiveLocation(BDLocation position) {
// Log.v(TAG, "onReceiveLocation--->getLatitude--->"+String.valueOf(position.getLatitude())) ;
// Log.v(TAG, "onReceiveLocation--->getLocType--->"+String.valueOf(position.getLongitude())) ;
// Log.v(TAG, "onReceiveLocation--->getRadius--->"+String.valueOf(position.getRadius())) ;
// Log.v(TAG, "onReceiveLocation--->position--->"+String.valueOf(position.getAddrStr())) ;
locationData.latitude = position.getLatitude();
locationData.longitude = position.getLongitude();
locationData.accuracy = position.getRadius();
locationData.direction = position.getDerect();
myLocationOverlay.setData(locationData);
mMapView.refresh();
mMapView.getController().animateTo(new GeoPoint((int)(locationData.latitude* 1e6), (int)(locationData.longitude * 1e6)), mHandler.obtainMessage(1));
}
@Override
public void onReceivePoi(BDLocation position) {
//这个函数貌似没有什么大的作用 。
}
}
}
相关文章推荐
- html5定位获取当前位置并在百度地图上显示
- html5定位获取当前位置并在百度地图上显示【转】
- 使用百度地图定位当前位置并获取附近poi -- Android学习之路
- 【经验小谈】百度定位api使用 百度定位demo 百度地图快速定位 百度地图获取当前位置 获取自己的位置 百度定位示例
- HTML5 调用 GPSAPI 获取当前位置的坐标 显示在地图上(有包括百度地图与谷歌地图)
- iOS GPS定位CLLocationManager获取当前位置坐标 示例代码
- 通过百度地图获取当前位置坐标
- 利用百度地图定位获取当前位置
- [android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题
- ios 定位获取当前位置信息
- 百度定位SDK实现获取当前经纬度及位置
- Android百度地图2.0运行定位到当前位置时“服务没有启动”
- 使用百度定位SDK获取当前位置的信息
- Android中GPS定位获取当前坐标
- WinRT获取坐标和当前的位置
- 如何使用Core Location获取当前的位置和GPS的坐标呢?
- iOS定位操作,获取当前位置,计算两点之间距离
- 通过gps,wifi,基站定位获取当前位置
- android 获取当前位置坐标
- 调用Android位置服务获取当前坐标