- 浏览: 1507769 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (63)
- android 地图开发,获取经纬度 (5)
- android基于Gps 定位和基站定位获取经纬度 (0)
- ADB server didn't ACK (1)
- android 开发颜色搭配 (2)
- android 设置wifi静态IP及DNS的方法 (2)
- android自定义滑动启动和关闭按钮 (1)
- android listview滑动删除 (2)
- js显示日历 (1)
- android EditText 设计 (1)
- Oracle执行计划详解 (1)
- android 下拉刷新以及加载更多 (1)
- android 技术 (2)
- android 欢迎界面翻页效果 (1)
- Android Animation 动画 (1)
- js 浮动效果 (1)
- android ListView (1)
- android PopupWindow (1)
- android Activity (1)
- android日期选择 (1)
- XML解析 (1)
- android Activity (1)
- JSON详解 (1)
- android 拍照选图 (2)
- android ActivityDialog (1)
- android Activity自定义Dialog (1)
- Android 感应器 (2)
- android 图片压缩 (1)
- Android 多媒体扫描 (2)
- Android 信息推送 (1)
- xmpp及时通讯 (1)
- Android NDK (1)
- android 图片处理 (1)
- android GridView (1)
- android 录音 (1)
- android 目录 (1)
- android Dialog (1)
- Android 屏幕滑动事件 (1)
- Android 数据库操作 (4)
- android插件开发模式 (1)
- TCP/IP 长连接 (1)
- OS操作 (1)
- android 抓包 (1)
- android 网络数据传输 (1)
最新评论
-
cys一:
google api key v2 新的不能使用
android google地图定位开发,且可以自由移动位置重新获取定位,地址信息 -
lmx612:
下载下来可以直接运行,也是我想要的
android listview 下拉刷新以及加载更多 -
tvvbbb:
辛苦楼主了
android 仿微信聊天界面,以及语音录制功能 -
Mandmg:
等了一天.终于下载到了
android 登陆、提交数据或加载数据时提示页面 -
ya1o1123:
android Activity实现从底部弹出或滑出选择菜单或窗口
一:百度地图开发必须要到百度开发平台android开发api下载相应的库,已经申请百度地图开发key,在这个博客里面有详细的说明和演示,(如果不懂得请看此文章) http://104zz.iteye.com/blog/1680781
二:新建项目baidumaplocation.设计main.xml文件这里注意的是MapView控件必须使用来自百度库封装好的com.baidu.mapapi.MapView 。设计代码如下:
<?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" > <FrameLayout android:id="@+id/map_layout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- 百度MapView控件 --> <com.baidu.mapapi.MapView android:id="@+id/map_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:apiKey="0Mg_koWoyZUiYLfZxmPfp4LKInB5LqTnagYueaw" android:clickable="true" android:enabled="true" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="vertical" android:paddingBottom="105dip" > <!-- 地址信息显示TextView --> <TextView android:id="@+id/map_bubbleText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/location_tips" android:gravity="left|center" android:maxEms="12" android:paddingLeft="12dip" android:paddingRight="10dip" android:text="@string/load_tips" android:textColor="#cfcfcf" android:textSize="14sp" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="vertical" > <!-- 位置指标显示ImageView --> <ImageView android:id="@+id/point_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginBottom="30dip" android:src="@drawable/point_start" /> </LinearLayout> </FrameLayout> </LinearLayout>
三:创建覆盖整个地图捕捉触控事件的MyMapOverlay继承Overlay
import android.view.MotionEvent; import com.baidu.mapapi.GeoPoint; import com.baidu.mapapi.MapView; import com.baidu.mapapi.Overlay; //覆盖整个地图捕捉触控事件的OverLay public abstract class MyMapOverlay extends Overlay{ private int point_X; private int point_Y; private GeoPoint newPoint; public MyMapOverlay(int x,int y){ point_X = x; point_Y = y; } boolean flagMove=false; //这里实现根据地图移动时重新获取屏幕中心点的经纬度坐标 @Override public boolean onTouchEvent(MotionEvent event, MapView mapView) { System.out.println("X->"+event.getX()+":"+point_X); System.out.println("Y->"+event.getY()+":"+point_Y); if(event.getAction() == MotionEvent.ACTION_DOWN){ changePoint(newPoint,1); }else if(event.getAction() == MotionEvent.ACTION_UP){ newPoint = mapView.getProjection().fromPixels(point_X,point_Y); changePoint(newPoint,2); } return false; } public abstract void changePoint(GeoPoint newPoint,int type); }
四:LocationActivity类继承百度库的MapActivity以及实现LocationListener接口,代码如下:
package com.location.activity;import java.io.IOException; import java.util.List; import java.util.Locale; import android.content.Intent; import android.location.Address; import android.location.Geocoder; import android.location.Location; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.Window; import android.widget.TextView; import com.android.map.MyMapOverlay; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.GeoPoint; import com.baidu.mapapi.LocationListener; import com.baidu.mapapi.MKAddrInfo; import com.baidu.mapapi.MKBusLineResult; import com.baidu.mapapi.MKDrivingRouteResult; import com.baidu.mapapi.MKLocationManager; import com.baidu.mapapi.MKPoiResult; import com.baidu.mapapi.MKSearch; import com.baidu.mapapi.MKSearchListener; import com.baidu.mapapi.MKSuggestionResult; import com.baidu.mapapi.MKTransitRouteResult; import com.baidu.mapapi.MKWalkingRouteResult; import com.baidu.mapapi.MapActivity; import com.baidu.mapapi.MapController; import com.baidu.mapapi.MapView; import com.baidu.mapapi.Overlay; public class LocationActivity extends MapActivity implements LocationListener { private MapView mapView; private MapController mMapCtrl; private List<Overlay> mapOverlays; public GeoPoint locPoint; private MyMapOverlay mOverlay; private TextView desText; private String lost_tips; private int point_X; private int point_Y; public final int MSG_VIEW_LONGPRESS = 10001; public final int MSG_VIEW_ADDRESSNAME = 10002; public final int MSG_GONE_ADDRESSNAME = 10003; private Intent mIntent; private int mLatitude; private int mLongitude; private String name; private BMapManager mapManager; private MKLocationManager mLocationManager = null; private boolean isLoadAdrr = true; private MKSearch mMKSearch; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); initMap(); mIntent = getIntent(); mLatitude = mIntent.getIntExtra("latitude", 0); mLongitude = mIntent.getIntExtra("longitude", 0); name = mIntent.getStringExtra("name"); mapView = (MapView) findViewById(R.id.map_view); desText = (TextView) this.findViewById(R.id.map_bubbleText); lost_tips = getResources().getString(R.string.load_tips); if (mLatitude != 0 && mLongitude != 0) { locPoint = new GeoPoint((int) (mLatitude * 1E6), (int) (mLongitude * 1E6)); desText.setText(name); } mapView.setBuiltInZoomControls(true); mapView.setClickable(true); mMapCtrl = mapView.getController(); point_X = this.getWindowManager().getDefaultDisplay().getWidth() / 2; point_Y = this.getWindowManager().getDefaultDisplay().getHeight() / 2; mOverlay = new MyMapOverlay(point_X, point_Y) { @Override public void changePoint(GeoPoint newPoint, int type) { if (type == 1) { mHandler.sendEmptyMessage(MSG_GONE_ADDRESSNAME); } else { locPoint = newPoint; mHandler.sendEmptyMessage(MSG_VIEW_LONGPRESS); } } }; mapOverlays = mapView.getOverlays(); if (mapOverlays.size() > 0) { mapOverlays.clear(); } mapOverlays.add(mOverlay); mMapCtrl.setZoom(20); } private void initMap() { // 初始化MapActivity mapManager = new BMapManager(getApplication()); // init方法的第一个参数需填入申请的API Key mapManager.init("C66C0501D0280744759A6957C42543AE38F5D540", null); super.initMapActivity(mapManager); // 实例化搜索地址类 mMKSearch = new MKSearch(); // 初始化搜索地址实例 mMKSearch.init(mapManager, new MySearchListener()); mLocationManager = mapManager.getLocationManager(); // 注册位置更新事件 mLocationManager.requestLocationUpdates(this); // 使用GPS定位 mLocationManager .enableProvider((int) MKLocationManager.MK_GPS_PROVIDER); } @Override protected void onResume() { if (mapManager != null) { mapManager.start(); } super.onResume(); } @Override protected void onPause() { isLoadAdrr = false; if (mapManager != null) { mapManager.stop(); } super.onPause(); } @Override protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } /** * 通过经纬度获取地址 * * @param point * @return */ private String getLocationAddress(GeoPoint point) { String add = ""; Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault()); try { List<Address> addresses = geoCoder.getFromLocation( point.getLatitudeE6() / 1E6, point.getLongitudeE6() / 1E6, 1); Address address = addresses.get(0); int maxLine = address.getMaxAddressLineIndex(); if (maxLine >= 2) { add = address.getAddressLine(1) + address.getAddressLine(2); } else { add = address.getAddressLine(1); } } catch (IOException e) { add = ""; e.printStackTrace(); } return add; } private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_VIEW_LONGPRESS:// 处理长按时间返回位置信息 { if (null == locPoint) return; mMKSearch.reverseGeocode(locPoint); desText.setVisibility(View.VISIBLE); desText.setText(lost_tips); mMapCtrl.animateTo(locPoint); mapView.invalidate(); } break; case MSG_VIEW_ADDRESSNAME: desText.setText((String) msg.obj); desText.setVisibility(View.VISIBLE); break; case MSG_GONE_ADDRESSNAME: desText.setVisibility(View.GONE); break; } } }; // 关闭程序也关闭定位 @Override protected void onDestroy() { if (mapManager != null) { mapManager.destroy(); mapManager = null; } super.onDestroy(); } /** * 根据MyLocationOverlay配置的属性确定是否在地图上显示当前位置 */ @Override protected boolean isLocationDisplayed() { return false; } /** * 当位置发生变化时触发此方法 * * @param location * 当前位置 */ public void onLocationChanged(Location location) { if (location != null) { locPoint = new GeoPoint((int) (location.getLatitude()* 1E6), (int) (location.getLongitude()* 1E6)); mHandler.sendEmptyMessage(MSG_VIEW_LONGPRESS); } } /** * 内部类实现MKSearchListener接口,用于实现异步搜索服务 * * @author liufeng */ public class MySearchListener implements MKSearchListener { /** * 根据经纬度搜索地址信息结果 * * @param result * 搜索结果 * @param iError * 错误号(0表示正确返回) */ public void onGetAddrResult(MKAddrInfo result, int iError) { if (result == null) { return; } Message msg = new Message(); msg.what = MSG_VIEW_ADDRESSNAME; msg.obj = result.strAddr; mHandler.sendMessage(msg); } /** * 驾车路线搜索结果 * * @param result * 搜索结果 * @param iError * 错误号(0表示正确返回) */ public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) { } /** * POI搜索结果(范围检索、城市POI检索、周边检索) * * @param result * 搜索结果 * @param type * 返回结果类型(11,12,21:poi列表 7:城市列表) * @param iError * 错误号(0表示正确返回) */ public void onGetPoiResult(MKPoiResult result, int type, int iError) { } /** * 公交换乘路线搜索结果 * * @param result * 搜索结果 * @param iError * 错误号(0表示正确返回) */ public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) { } /** * 步行路线搜索结果 * * @param result * 搜索结果 * @param iError * 错误号(0表示正确返回) */ public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) { } public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) { // TODO Auto-generated method stub } public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) { // TODO Auto-generated method stub } } }
五:在AndroidManifest.xml住添加相关的访问权限
<!-- 访问网络的权限 -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- 访问精确位置的权限 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 访问网络状态的权限 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 访问WIFI网络状态的权限 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 改变WIFI网络状态的权限 --> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 读写存储卡的权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 读取电话状态的权限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
六:运行结果如下图:
评论
17 楼
LanSeTianKong12
2015-07-07
闪退,为什么呢
16 楼
baiaijie
2015-06-13
我的有停止运行了
15 楼
sonny_
2015-04-22
han5222 写道
4.2以上版本就不能用了
确实用不了了
14 楼
han5222
2015-03-26
4.2以上版本就不能用了
13 楼
zh126613
2014-12-14
闪退了 怎么回事啊
12 楼
lovewsb
2014-10-29
xihuanderen 写道
您好!请问为什么将您代码放我电脑上运行时,报java.nio.bufferunderflowexception错误。请问这是什么原因?该怎么样去解决?
11 楼
u011522933
2014-09-15
很 好
10 楼
xihuanderen
2014-09-03
您好!请问为什么将您代码放我电脑上运行时,报java.nio.bufferunderflowexception错误。请问这是什么原因?该怎么样去解决?
9 楼
movedream
2014-05-24
你好,为什么会停止运行哈,是不是因为JAR包更新了?
8 楼
lauphai
2014-04-03
闪退了。。。
7 楼
84771176
2013-12-19
请教下 如何像嘀嘀打车那样获取到 所在地区的社区的名称
6 楼
细红蕊
2013-11-06
您好!请问为什么将您代码放我电脑上运行时,报java.nio.bufferunderflowexception错误。请问这是什么原因?
5 楼
简屋_l
2013-06-13
这个方法里取得onGetAddrResult GeoPoint 转换的经纬度和result.stradd显示的不是一个地点 有比较大的偏差 不知楼主注意到这个问题没 求解 呵呵
4 楼
104zz
2012-10-12
flycatdeng 写道
你这个getLocationAddress 方法没有用到,,,为什么点击绿色的之后能够显示位置呢?
requestWindowFeature(Window.FEATURE_NO_TITLE); 这一句有什么作用
requestWindowFeature(Window.FEATURE_NO_TITLE); 这一句有什么作用
getLocationAddress方法确实没有用到,但是这里用的是百度封装好的方法,从MKSearchListener 接口的onGetAddrResult方法获取到位置信息的
requestWindowFeature(Window.FEATURE_NO_TITLE);这句是去掉标题栏的
3 楼
flycatdeng
2012-10-11
你这个getLocationAddress 方法没有用到,,,为什么点击绿色的之后能够显示位置呢?
requestWindowFeature(Window.FEATURE_NO_TITLE); 这一句有什么作用
requestWindowFeature(Window.FEATURE_NO_TITLE); 这一句有什么作用
2 楼
104zz
2012-10-07
guohailing 写道
怎样在地图上显示的是你当前所在的位置
上面写得很清楚,你要是仔细看就懂了,首先获取到你当前的经纬度,然后根据经纬度来获取GeoPoint对象,得到这个对象后就可以使用百度api中的方法获取或者android中api的办法获取你当前的位置地址,你也可以通过别的办法获取,有时候获取到的位置并不准确这个跟你获取经纬度的方法有关
1 楼
guohailing
2012-10-05
怎样在地图上显示的是你当前所在的位置
发表评论
-
android google地图定位开发,且可以自由移动位置重新获取定位,地址信息
2012-09-18 23:29 18850一:申请key: 1.首先找到debug ... -
android 基于基站,apn,gps,wifi,network 根据不同手机sim卡获取经纬度
2012-09-18 22:12 6139一:新建MyLocation类,本类主要管理使用各种 ... -
android基于Gps 定位和基站定位获取经纬度
2012-09-18 21:26 12292一:新建MyLocationManager.java ... -
android 基于百度地图api获取经纬度
2012-09-18 20:35 65547一:申请百度地图key 申请key网址:http: ...
相关推荐
总结来说,基于百度地图API实现Android定位功能需要完成SDK集成、API密钥配置、地图初始化、定位服务开启与监听、显示定位标记等一系列步骤。在实际开发中,还需要关注性能优化和异常处理,以确保应用的稳定性和用户...
在开发基于百度地图API的手机地图应用中,我们需要掌握一系列技术知识和技能,...以上就是基于百度地图API开发手机地图应用所需掌握的主要知识点,这些技术和实践将帮助开发者创建出功能强大且用户体验优秀的地图应用。
在Android客户端,文章详细阐述了基于百度地图API的应用开发。通过解析服务器返回的JSON数据,客户端可以在地图上实时显示车辆位置,并实现历史轨迹的回放。同时,客户端界面设计遵循Android的Material Design原则,...
在Android平台上开发基于百度地图的应用是一项常见的任务,它涉及到Android编程、网络通信、地理信息系统(GIS)以及百度地图API的使用。本项目标题为“基于android的百度地图应用”,其描述指出该应用功能虽简单但...
本篇文章将详细讲解如何利用百度地图API实现定位功能,包括基本概念、工作原理以及实际应用步骤。 首先,我们需要了解百度地图定位服务的核心组件——百度定位SDK。它提供了强大的定位能力,支持GPS、基站、WIFI等...
总之,这个项目为开发者提供了一个关于如何在Android中利用百度地图API实现定时定位的实例,对于学习和实战具有很高的参考价值。通过深入理解和实践,开发者可以更好地掌握Android定位服务以及第三方API的集成技巧。
在本项目中,开发者利用了Android平台和百度地图API创建了一个旅游地图应用,这是一款针对旅行者设计的实用工具,可以提供丰富的地图服务和旅行相关信息。以下是对该项目各个方面的详细阐述: 1. **Android开发环境...
在安卓平台上,开发一款基于百度地图API的定位软件可以实现高效、精准的地理位置服务。这款“秒定位精准”软件利用了百度地图强大的地理信息系统,为用户提供实时、准确的定位功能,尤其适合对安卓开发初学者进行...
本项目关注的是“基于百度地图API的周边POI(Point of Interest)搜索”,这是一个典型的地理定位与信息检索应用场景,主要涉及到Android平台上的开发。下面将详细阐述相关知识点: 1. **百度地图API**:百度地图...
Android平台下基于百度地图API的地图导航设计 在本文中,我们将讨论基于百度地图API的地图导航设计在Android平台下的实现。该设计主要涉及到地图搜索、位置定位、附近搜索、路线规划、公交线路查询、GPS导航等功能...
本资源“安卓GPS地图导航定位指南相关-Android百度地图API-定位周边搜索POI源码.rar”提供了基于百度地图API实现的定位和周边搜索功能的源码,可以帮助开发者更好地理解和运用这些技术。 首先,我们要了解什么是GPS...
在Android开发中,创建一款基于地图的应用是一项常见的需求,而百度地图API则为开发者提供了强大的地图功能支持。本文将深入探讨如何利用百度地图API来制作Android地图应用,以及实现地图上的位置搜索和周边信息显示...
本文将深入探讨一个基于Android平台,利用百度地图API开发的导航定位系统,通过分析其核心技术和实现流程,为读者提供一份详尽的理解指南。 一、系统概述 基于Android的百度地图导航定位系统,主要由客户端应用和...
在Android应用开发中,使用百度地图API是一种常见的实践,特别是在实现地理位置相关功能时。本文将深入探讨如何在Android Studio 3.0环境下,利用百度地图SDK实现基于经纬度的定位功能以及地图类型的切换,包括普通...
在Android平台上开发一款基于百度地图API的定位应用,可以实现高效、精准的地理位置服务。本文将详细介绍如何利用百度地图SDK来构建这样的应用,包括集成步骤、权限设置、地图显示、定位功能实现以及常见问题的解决...
**周边搜索**是基于百度地图API实现的另一项重要功能。开发者可以通过关键词搜索,获取指定范围内的餐馆、酒店、公交站等地点信息,为用户提供生活服务推荐。同时,API还支持自定义POI(Point of Interest)数据,...
在Android开发中,百度地图API是一个非常重要的工具,它提供了丰富的功能,如定位、路径规划、地图渲染等。本文将详细讲解如何利用百度地图API进行定位及周边搜索POI(Point of Interest)的源码实现。 首先,我们...
在Android开发中,使用百度地图API来实现运动轨迹和GPS定位是一项常见的功能。这个实训项目主要涉及以下几个核心知识点: 1. **百度地图API**:首先,你需要集成百度地图SDK到你的Android项目中。这通常包括在项目...
在Android开发中,百度地图API是一个非常重要的工具,它提供了丰富的功能,如定位、地图展示、路线规划、周边搜索等。这个"Android 百度地图API-定位周边搜索POI源码.7z"文件应该包含了一个完整的示例项目,用于演示...