android获取位置定位接完百度地图 定位我的位置总是北京怎么回事 根据第一行代码里的内容写的

android(3)
之前使用过一些第三方的地图api,最后还是觉得百度的比较好用,刚好最近做一个项目,需要用到地图的功能,也比较简单,就是获取当前位置,然后可以自己手动在地图上选择位置,把经纬度丢给服务端。我用的就是百度地图
下面就开始做了,注册开发者账号、申请key、下载SDK什么的,就不说了,官网上说的很清楚。就直接贴代码了:
我先建了一个类,继承Application,里面就一行代码,初始化地图。
public class LocationApp extends Application {
public void onCreate() {
super.onCreate();
SDKInitializer.initialize(getApplicationContext());
为什么地图初始化的方法要写这里,因为文档里做了说明:
然后就是主类了,里面我先贴一部分代码,完整的之后在文章最后面有下载链接。
首先要在main.xml里面把地图的控件给加上:
&com.baidu.mapapi.map.MapView
android:id=&@+id/bmapView&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:clickable=&true& /&
然后在Main.java中,对这个控件进行一些初始化,就可以展示一张最基本的地图了。
private MapView mapV
private BaiduMap baiduM
mapView = (MapView) findViewById(R.id.bmapView);
baiduMap = mapView.getMap();
baiduMap.setMapStatus(MapStatusUpdateFactory.zoomTo(17));//地图缩放级别为17
就这样就可以了,运行的话,应该就可以看到位置在北京的地图。
当然这只是最简单了,还要有定位的功能,定位出来后,要在地图上把这个点标出来,然后把地图移动到这个点的位置。
private LocationClient locationC
private BDLocationListener listener = new MyLocationListener();locationClient = new LocationClient(getApplicationContext());
locationClient.registerLocationListener(listener);
initLocation();// 初始化定位参数
private void initLocation(){
LocationClientOption option = new LocationClientOption();
option.setCoorType(&bd09ll&);//可选,默认gcj02,设置返回的定位结果坐标系
int span=1000;
option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);//可选,默认false,设置是否使用gps
option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果
option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果
option.setIgnoreKillProcess(false);//可选,默认false,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认杀死
option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
locationClient.setLocOption(option);
locationClient.start();
}// 定位监听
public class MyLocationListener implements BDLocationListener {
public void onReceiveLocation(BDLocation loc) {
if (loc != null && (loc.getLocType() == 161 || loc.getLocType() == 66)) {
//这里得到BDLocation就是定位出来的信息了
Toast.makeText(MainActivity.this, &定位失败,请检查手机网络或设置!&, Toast.LENGTH_LONG).show();
上面的这些代码,就是定位的代码了,在MyLocationListener里面,BDLocation有值的话,就说明定位成功了。下面附上BDLocation的说明,想得到什么信息,都可以去得到:
内容就不贴了,太长了,直接给个网站,打开就可以了:
既然定位的信息得到了,就要在地图上添加个标注,显示当前位置:
LatLng point = new LatLng(location.getLatitude(), location.getLongitude());
setMapOverlay(point);
baiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(point));// 在地图上添加标注
private void setMapOverlay(LatLng point) {
latitude = point.
longitude = point.
baiduMap.clear();
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_openmap_mark);
OverlayOptions option = new MarkerOptions().position(point).icon(bitmap);
baiduMap.addOverlay(option);
这样就可以了,显示的结果就是下面这样的:
这样就满足了第一个需求,就是获取当前位置,并在地图上显示出来。第二个需求就是要能自己在地图上选点,比如现在自动定的位置,不想让服务端知道在这里,要换一个,就可以把地图拖动到其他地方,选择自己想要的位置,点一下,就可以了。
这个功能实现起来也比较简单,给地图添加一个OnMapClickListener点击事件就可以了:
baiduMap.setOnMapClickListener(new OnMapClickListener() {
public boolean onMapPoiClick(MapPoi poi) {
public void onMapClick(LatLng point) {
Log.d(&map click&, point.longitude+&,&+point.latitude);
setMapOverlay(point);
getInfoFromLAL(point);
});// 根据经纬度查询位置
private void getInfoFromLAL(final LatLng point) {
pb.setVisibility(View.VISIBLE);
infoText.setText(&经度:&+point.latitudeE6+&,纬度&+point.latitudeE6);
GeoCoder gc = GeoCoder.newInstance();
gc.reverseGeoCode(new ReverseGeoCodeOption().location(point));
gc.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
pb.setVisibility(View.GONE);
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Log.e(&发起反地理编码请求&, &未能找到结果&);
infoText.setText(&经度:&+point.latitudeE6+&,纬度&+point.latitudeE6
+&\n&+result.getAddress());
public void onGetGeoCodeResult(GeoCodeResult result) {
这样就OK了。选择其他地方的一个点,就可以得到该点的位置了:
完事了,功能比较简单,附上源码下载地址:
项目放到eclipse中后,一定要在AndroidManifest.xml中把自己申请的key加上。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:18148次
排名:千里之外
原创:13篇
评论:22条
(1)(1)(1)(1)(3)(6)android百度地图怎么在点击地图时获取点击的详细地址信息,下面是我写的代码求大神帮帮看看!!!
[问题点数:20分,结帖人cst11041]
android百度地图怎么在点击地图时获取点击的详细地址信息,下面是我写的代码求大神帮帮看看!!!
[问题点数:20分,结帖人cst11041]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2015年8月 移动开发大版内专家分月排行榜第三2014年9月 移动开发大版内专家分月排行榜第三2014年7月 移动开发大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。Android调用百度地图API实现——实时定位代码
为了方便,我特意新建一个Android优秀交流总群,
案例代码加入QQ群:(500人)(1000人)&可以下载
MainActivity.class
package yu.hong.
import com.baidu.mapapi.BMapM
import com.baidu.mapapi.GeoP
import com.baidu.mapapi.LocationL
import com.baidu.mapapi.MKGeneralL
import com.baidu.mapapi.MKLocationM
import com.baidu.mapapi.MapA
import com.baidu.mapapi.MapC
import com.baidu.mapapi.MapV
import com.baidu.mapapi.MyLocationO
import android.location.L
import android.os.B
import android.view.KeyE
import android.view.M
import android.view.MenuI
import android.widget.T
public class MainActivity extends MapActivity {
// 初始为于勉庄
private double userLongitude = 33.36 * 1E6;//
private double userLatitude = 115.28 * 1E6;//
// 添加百度相关控件
private MapView mapV
private BMapManager bMapM// 加载地图的引擎
// 百度地图上的key值
private String keyString =
"01331AFA954E7EF0C9C829E0E16F87A3";
// 在百度地图上添加一些控件,例如放大、缩小
private MapController mapC
private MKLocationManager mLocationM
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 实例化控件
mapView = (MapView) this.findViewById(R.id.bmapView);
bMapManager = new BMapManager(MainActivity.this);
// 必须要加载key
bMapManager.init(keyString, new MKGeneralListener() {
// key值不正确
public void onGetPermissionState(int arg0) {
if (arg0 == 300) {
Toast.makeText(MainActivity.this, R.string.key_error,
Toast.LENGTH_LONG).show();
//网络出错
public void onGetNetworkState(int arg0) {
Toast.makeText(MainActivity.this, R.string.net_error,
Toast.LENGTH_LONG).show();
this.initMapActivity(bMapManager);
mapView.setBuiltInZoomControls(true);// 表示可以设置缩放功能
mapController = mapView.getController();
// 初始化Location模块
mLocationManager = bMapManager.getLocationManager();
// 通过enableProvider和disableProvider方法,选择定位的Provider
mLocationManager.enableProvider(MKLocationManager.MK_NETWORK_PROVIDER);
mLocationManager.disableProvider(MKLocationManager.MK_GPS_PROVIDER);
//返回手机位置
mLocationManager.requestLocationUpdates(locationListener);
mLocationManager.setNotifyInternal(5, 2);
// 添加定位图层
MyLocationOverlay myLocationOverlay = new
MyLocationOverlay(this,
myLocationOverlay.enableMyLocation(); // 启用定位
myLocationOverlay.enableCompass(); // 启用指南针
mapView.getOverlays().add(myLocationOverlay);
mapView.setTraffic(true);// 交通地图
// mapView.setSatellite(true);// 卫星地图
mapController.setZoom(15);// 设置缩放级别
mapView.invalidate();// 刷新地图
//获取经度纬度
private LocationListener locationListener = new
LocationListener() { &
public void onLocationChanged(Location location) {
if (location != null) { &
userLatitude = location.getLatitude() * 1E6;
& & userLongitude =
location.getLongitude() * 1E6;
& & GeoPoint mypoint = new
GeoPoint((int)(userLatitude), (int)(userLongitude));
mapView.getController().animateTo(mypoint);
protected void onDestroy() {
super.onDestroy();
if (bMapManager != null) {
bMapManager.destroy();
bMapManager =
protected void onPause() {
super.onPause();
if (bMapManager != null) {
mLocationManager.removeUpdates(locationListener);
bMapManager.stop();
protected void onResume() {
super.onResume();
if (bMapManager != null) {
bMapManager.start();
protected boolean isRouteDisplayed() {
// 当点击Menu按钮时,调用该方法
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 1, 1, R.string.exit).setIcon(
android.R.drawable.ic_menu_close_clear_cancel);
return super.onCreateOptionsMenu(menu);
public boolean onContextItemSelected(MenuItem item) { //
选中某个菜单项
if (item.getItemId() == 1) {
MainActivity.this.finish(); &
return super.onOptionsItemSelected(item);
// 返回键 &
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) { &
& & finish();
return super.onKeyDown(keyCode, event);
activity_mainmain.xml
&&&LinearLayout
xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" &
添加显示百度地图的控件 --&
&com.baidu.mapapi.MapView
& android:id="@+id/bmapView"
& android:layout_width="fill_parent"
& android:layout_height="fill_parent"
& android:clickable="true"
& tools:context=".MainActivity"
&/LinearLayout&
AndroidManifest.xml
&&&manifest
xmlns:android="/apk/res/android"
package="yu.hong.map"
android:versionCode="1"
android:versionName="1.0" &
& android:minSdkVersion="10"
& android:targetSdkVersion="15"
&!--添加百度地图开发授权
&uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"
&uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
&uses-permission
android:name="android.permission.INTERNET" /&
&uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
&uses-permission
android:name="android.permission.ACCESS_WIFI_STATE"
&uses-permission
android:name="android.permission.CHANGE_WIFI_STATE"
&uses-permission
android:name="android.permission.READ_PHONE_STATE"
&!--添加对屏幕的支持
&supports-screens
& android:anyDensity="true"
& android:largeScreens="true"
& android:normalScreens="true"
& android:resizeable="true"
& android:smallScreens="true"
&application
& android:icon="@drawable/ic_maplauncher"
& android:label="@string/app_name"
& android:theme="@style/AppTheme"
& &activity
android:name=".MainActivity"
android:label="@string/title_activity_main" &
&intent-filter&
& & &action
android:name="android.intent.action.MAIN" /&
& & &category
android:name="android.intent.category.LAUNCHER"
&/intent-filter&
& &/activity&
&/application&
&/manifest&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 android 定位当前位置 的文章

 

随机推荐