- 浏览: 537992 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
landerson:
明显就有要求的嘛
ANDROID轻量级JSON序列化和反序列化[转] -
jimode2013:
很不错,就是需要这个方法
多个UIViewController使用addSubView,第二个 UIViewController 不响应旋转[转] -
w11h22j33:
...
[转]NSMutableArray中的自动释放对象让我郁闷了一整天 -
w11h22j33:
UILabel* label = [[UILabel a ...
Iphone开发 -
w11h22j33:
http://mobile.51cto.com/iphone- ...
获得通讯录中联系人的所有属性[转]
http://aokunsang.iteye.com/blog/1119075
最近由于项目需要,研究了下百度地图定位,他们提供的实例基本都是用监听器实现自动定位的。我想实现一种效果:当用户进入UI时,不定位,用户需要定位的时候,自己手动点击按钮,再去定位当前位置。 经过2天研究和咨询,找到了解决方案,在此备忘一下。
注意:定位使用真机才能够真正定位;模拟器的话,在DDMS中的Emulator Control中,选择Manual,下面单选按钮选择Decimal,然后填写经纬度,send后,再点击定位我的位置按钮,就能定位了(这应该算是固定定位,哈哈。。。)、
1、第一步当然是获取一个针对自己项目的key值。http://dev.baidu.com/wiki/static/imap/key/
2、使用百度API是有前提的,摘自百度:首先将API包括的两个文件baidumapapi.jar和libBMapApiEngine.so拷贝到工程根目录及libs\armeabi目录下,并在工程属性->Java Build Path->Libraries中选择“Add JARs”,选定baidumapapi.jar,确定后返回,这样您就可以在您的程序中使用API了。(这两个文件见附件)。
3、按照自己的需求写一个layout,我的如下:
<?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:id="@+id/myLocation_id"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:textSize="15dp"
- android:gravity="center_horizontal"
- android:textColor="@drawable/black"
- android:background="@drawable/gary"
- />
- <com.baidu.mapapi.MapView android:id="@+id/bmapsView"
- android:layout_width="fill_parent" android:layout_height="fill_parent"
- android:clickable="true" android:layout_weight="1"
- />
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/location_button_id"
- android:text="@string/location_button_text"
- />
- </LinearLayout>
需要特别注意的是:<com.baidu.mapapi.MapView /> 这玩意。
4、写一个MapApplication实现application,提供全局的BMapManager,以及其初始化。
- public BMapManager mapManager = null;
- static MapApplication app;
- public String mStrKey = "你申请的key值";
- @Override
- public void onCreate() {
- mapManager = new BMapManager(this);
- mapManager.init(mStrKey, new MyGeneralListener());
- }
- @Override
- //建议在您app的退出之前调用mapadpi的destroy()函数,避免重复初始化带来的时间消耗
- public void onTerminate() {
- // TODO Auto-generated method stub
- if(mapManager != null)
- {
- mapManager.destroy();
- mapManager = null;
- }
- super.onTerminate();
- }
- static class MyGeneralListener implements MKGeneralListener{
- @Override
- public void onGetNetworkState(int arg0) {
- Toast.makeText(MapApplication.app.getApplicationContext(), "您的网络出错啦!",
- Toast.LENGTH_LONG).show();
- }
- @Override
- public void onGetPermissionState(int iError) {
- if (iError == MKEvent.ERROR_PERMISSION_DENIED) {
- // 授权Key错误:
- Toast.makeText(MapApplication.app.getApplicationContext(),"您的授权Key不正确!",
- Toast.LENGTH_LONG).show();
- }
- }
- }
- 5、接下来就是按照百度api写定位代码了,使用handler机制去添加定位图层,需要说明的都在注释上了。
- private BMapManager mBMapMan = null;
- private MapView mMapView = null;
- private MapController bMapController;
- private MKLocationManager mkLocationManager;
- private MKSearch mkSearch;
- private TextView address_view; //定位到的位置信息
- private ProgressDialog dialog;
- private List<HotelInfo> hotelList;
- private int distance = 1000; //查询的范围(单位:m)
- Handler handler = new Handler(){
- @Override
- public void handleMessage(Message msg) {
- double lat = msg.getData().getDouble("lat");
- double lon = msg.getData().getDouble("lon");
- if(lat!=0&&lon!=0){
- GeoPoint point = new GeoPoint(
- (int) (lat * 1E6),
- (int) (lon * 1E6));
- bMapController.animateTo(point); //设置地图中心点
- bMapController.setZoom(15);
- mkSearch.reverseGeocode(point); //解析地址(异步方法)
- MyLocationOverlay myLoc = new MyLocationOverlayFromMap(ShowMapAct.this,mMapView);
- myLoc.enableMyLocation(); // 启用定位
- myLoc.enableCompass(); // 启用指南针
- mMapView.getOverlays().add(myLoc);
- }else{
- Toast.makeText(ShowMapAct.this, "没有加载到您的位置", Toast.LENGTH_LONG).show();
- }
- if(hotelList!=null){
- Drawable marker = getResources().getDrawable(R.drawable.iconmarka); //设置marker
- marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight()); //为maker定义位置和边界
- mMapView.getOverlays().add(new OverItemList(marker,hotelList,ShowMapAct.this,bMapController));
- }else if(hotelList==null&&lat!=0&&lon!=0){
- Toast.makeText(ShowMapAct.this, "网络异常,没有获取到酒店信息。", Toast.LENGTH_LONG).show();
- }
- if(dialog!=null) dialog.dismiss();
- }
- };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- distance = getIntent().getExtras().getInt("distance"); //获取查询范围
- super.onCreate(savedInstanceState);
- setContentView(R.layout.location);
- mMapView = (MapView)findViewById(R.id.bmapsView); //初始化一个mapView 存放Map
- init(); //初始化地图管理器
- super.initMapActivity(mBMapMan);
- address_view = (TextView)findViewById(R.id.myLocation_id);
- SpannableStringBuilder style = new SpannableStringBuilder(String.format(getResources().getString(R.string.location_text),"位置不详"));
- style.setSpan(new ForegroundColorSpan(Color.RED), 5, style.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- address_view.setText(style);
- Button location_button = (Button)findViewById(R.id.location_button_id);
- location_button.setOnClickListener(new View.OnClickListener(){
- @Override
- public void onClick(View v) {
- dialog = ProgressDialog.show(ShowMapAct.this, "", "数据加载中,请稍后.....");
- new Thread(new MyThread()).start();
- }
- });
- mkSearch = new MKSearch(); //初始化一个MKSearch,根据location解析详细地址
- mkSearch.init(mBMapMan, this);
- mMapView.setBuiltInZoomControls(true); //启用内置的缩放控件
- bMapController = mMapView.getController();
- GeoPoint defaultPoint = new GeoPoint((int) (39.920934 * 1E6),(int) (116.412817 * 1E6)); //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
- bMapController.setCenter(defaultPoint); //设置地图中心点
- bMapController.setZoom(12); //设置地图zoom级别
- mkLocationManager = mBMapMan.getLocationManager();
- }
- /**
- * 初始化地图管理器BMapManager
- */
- public void init(){
- MapApplication app = (MapApplication)getApplication();
- if (app.mapManager == null) {
- app.mapManager = new BMapManager(getApplication());
- app.mapManager.init(app.mStrKey, new MapApplication.MyGeneralListener());
- }
- mBMapMan = app.mapManager;
- }
- @Override
- protected void onDestroy() {
- MapApplication app = (MapApplication)getApplication();
- if (mBMapMan != null) {
- mBMapMan.destroy();
- app.mapManager.destroy();
- app.mapManager = null;
- mBMapMan = null;
- }
- super.onDestroy();
- }
- @Override
- protected void onPause() {
- if (mBMapMan != null) {
- // 终止百度地图API
- mBMapMan.stop();
- }
- super.onPause();
- }
- @Override
- protected void onResume() {
- if (mBMapMan != null) {
- // 开启百度地图API
- mBMapMan.start();
- }
- super.onResume();
- }
- @Override
- protected boolean isRouteDisplayed() {
- return false;
- }
- @Override
- public void onGetAddrResult(MKAddrInfo result, int iError) {
- if(result==null) return;
- SpannableStringBuilder style = new SpannableStringBuilder(String.format(getResources().getString(R.string.location_text),result.strAddr));
- style.setSpan(new ForegroundColorSpan(Color.RED), 5, style.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- address_view.setText(style);
- if(dialog!=null) dialog.dismiss();
- }
- @Override
- public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {}
- @Override
- public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {}
- @Override
- public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {}
- @Override
- public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {}
- /**
- * 重新定位,加载数据
- * @author Administrator
- *
- */
- class MyThread implements Runnable{
- @Override
- public void run() {
- /**
- * 最重要的就是这个玩意
- * 由于LocationListener获取第一个位置修正的时间会很长,为了避免用户等待,
- * 在LocationListener获取第一个更精确的位置之前,应当使用getLocationInfo() 获取一个缓存的位置
- */
- Location location = mkLocationManager.getLocationInfo();
- double lat = 0d,lon = 0d;
- if(location!=null){ //定位到位置
- String coordinate = location.getLatitude()+","+location.getLongitude();
- HotelRemoteData hotelData = new HotelRemoteData();
- /**
- * 远程获取酒店列表数据
- */
- hotelList = hotelData.getHotelToMap(coordinate,distance);
- lat = location.getLatitude();
- lon = location.getLongitude();
- }
- Message msg = new Message();
- Bundle data = new Bundle();
- data.putDouble("lat", lat);
- data.putDouble("lon", lon);
- msg.setData(data);
- handler.sendMessage(msg);
- }
- }
6、还有一种就是百度示例相当推荐的,也是加载定位位置速度比较快的,那就是通过定位监听器来定位信息。没啥难的,照着百度的示例写,都能搞定。
- LocationListener listener = new LocationListener() {
- @Override
- /** 位置变化,百度地图即会调用该方法去获取位置信息。
- * (我测试发现就算手机不动,它也会偶尔重新去加载位置;只要你通过重力感应,他就一定会重新加载)
- */
- public void onLocationChanged(Location location) {
- GeoPoint gp = new GeoPoint((int) (location.getLatitude() * 1E6), (int) (location.getLongitude() * 1E6)); //通过地图上的经纬度转换为地图上的坐标点
- bMapController.animateTo(gp); //动画般的移动到定位的位置
- }
- };
- baidu.rar (583.6 KB)
- 下载次数: 318
发表评论
-
干掉你程序中的僵尸代码【转】
2012-12-22 11:05 966随着万圣节越来越流行,我感觉有必要跟大家讨论一下一个 ... -
一个文本框搞定信用卡相关信息的输入[转]
2012-12-22 11:03 1139http://beforweb.com/node/134 ... -
android 开源 OCR 项目 及手写识别[转]
2012-12-11 18:21 57701)一个为Android平台,将识别由手机的相机拍摄的图 ... -
Android通过共享用户ID来实现多Activity进程共享【转】
2012-12-10 14:33 1109http://mypyg.iteye.com/blog/720 ... -
Android应用程序组件Content Provider的启动过程源代码分析【转】
2012-12-05 18:31 1148通过前面的学习,我们知道在Android系统中,Cont ... -
理解android上的安全性【转】
2012-12-03 18:08 918开发 Android 应用程序时,必须处理很多与安全性相关的方 ... -
Android 安全机制概述 Permission【转】
2012-12-03 18:07 11751 Android 安全机制概述 Android 是一个权限分 ... -
Android学习笔记之一谁动了我的接口附checkPermission流程(Dean)[转]
2012-12-03 18:06 18127前段时间接到一个有趣的需求!我们实现的某某功能的手机对外提供了 ... -
(JAVA) 使用异或进行简单的密码加密(JAVA实现)[转]
2012-11-12 16:44 1219http://blog.sina.com.cn/s/bl ... -
SL4A 之实现原理解析【转】
2012-10-23 23:52 1285关于SL4A的简介和在Android系统的安装及使用,请参 ... -
百度地图API之根据经纬度查询地址信息(Android)[转]
2012-06-16 00:15 19803http://blog.csdn.net/lyq8479/ar ... -
如何编程实现开启或关闭GPS?
2012-06-09 22:14 1132来自 手机应用中最酷的可能就是位置服务相关的了, ... -
Android软键盘的隐藏显示研究[转]
2012-05-25 16:30 1444Android是一个针对触摸屏专门设计的操作系统,当点 ... -
15 个变量和方法命名的最佳实践[转]
2012-02-27 11:44 103215 个变量和方法命名的最佳实践 在每个代码范围内使用足够短 ... -
iPhone Android Web开发(概要)
2012-01-19 15:15 1070一、 前端使用技术 JavaScript、 jQuer ... -
移动 电信 联通 APN cmwap cmnet ctwap ctnet 3gwap uniwap 3gnet uninet设置[转]
2011-11-23 14:35 2781APN(Access Point Name),即“接入 ... -
Android Http CMWAP联网获取实例【转】
2011-10-24 13:24 1403上午的时候原本想通过改变切入点的方式来实现cmwap,但是我们 ... -
监听ListView滚动到最底部【转】
2011-09-13 10:27 5885监听ListView的滚动可以用两个东西: ListV ... -
Android蓝牙开发浅谈【转】
2011-09-07 14:20 1574转自:http://www.eoeandroid.co ... -
修改Android模拟器的HOST
2011-06-03 11:08 4223C:\WINDOWS\system32\drivers ...
相关推荐
标题中的“百度地图的手动定位和自动定位”指的是在使用百度地图服务时,两种不同的定位方式。手动定位通常是指用户通过点击地图上的某一点来设置自己的位置,而自动定位则是利用GPS、Wi-Fi信号或基站数据等技术实时...
在Android开发中,集成百度地图API来实现移动设备上的位置获取和自动定位是一项常见的任务。这份"Android应用源码之百度地图移动获取位置,自动定位.rar"压缩包中包含了一个完整的示例项目,用于演示如何在Android...
在现代城市生活中,导航软件已经成为了出行不可或缺的工具,其中百度地图作为国内广泛使用的地图应用,为用户提供了一系列便捷的功能,包括公交查询和自动定位。本文将深入探讨这两个关键功能及其在日常生活中的应用...
本文将深入探讨“百度地图Poi搜索功能(含自动检索附近地址)”,这一主题涉及到Android平台上的百度地图SDK,以及如何实现Poi(Point of Interest,兴趣点)搜索和自动定位功能。 首先,我们要了解的是**Android...
总之,“GPS坐标百度转换.zip”提供的工具解决了批量转换GPS坐标到百度地图兼容格式的问题,利用JavaScript的强大功能实现了高效的数据处理和转换,对于需要在百度地图上展示大量GPS数据的应用场景非常有用。...
在本教程中,我们将深入探讨如何在Android应用中实现百度地图定位功能。首先,我们需要理解“百度地图定位小应用”这个项目的核心概念。 1. **百度地图API** 百度地图提供了丰富的API服务,允许开发者在Android...
本文将深入探讨“百度地图poi搜索+自动检索附近地址”这一主题,结合提供的标签“百度地图”和“poi检索”,以及压缩包中的文件名“BaiduMapDemo”,我们将详细讲解如何实现这个功能。 1. **百度地图API** 百度...
2. 在设备上安装最新版的百度地图应用,或者手动下载地图数据。 3. 验证AndroidManifest.xml中的权限设置。 4. 更新百度地图SDK至最新稳定版本,确保兼容性。 5. 查看日志输出,寻找可能的错误提示,这将有助于定位...
在“百度地图定位”中,主要有三种定位方式:GPS(全球定位系统)、基站定位和Wi-Fi定位。GPS通过接收多颗卫星信号来计算设备的位置,适用于户外开阔环境,精度较高。基站定位则是通过识别手机连接的移动通信基站,...
在本文中,我们将深入探讨如何使用百度地图API创建一个初学者友好的示例应用,该应用能够实现手动定位以及在地图上显示用户当前位置的详细信息。我们将覆盖以下几个关键知识点: 1. **百度地图API**: 百度地图API...
百度地图JavaScript API是百度提供的一款强大的地图开发工具,它允许开发者通过JavaScript语言在网页上集成地图功能,包括但不限于定位、地图展示、标记、路线规划、地理编码等。这个"百度地图JavaScriptAPI离线版....
本文将详细介绍“百度定位Demo”,一个基于百度地图API实现的位置服务示例,旨在帮助开发者快速理解和接入百度定位服务。 一、百度定位服务概述 百度定位服务是百度地图开放平台提供的一项API服务,它能够为开发者...
首先,"百度地图jar包"是百度地图SDK的核心组件,它包含了实现地图展示、定位、路径规划等功能的Java类和方法。开发者需要将其导入到项目中,才能调用百度地图的各项服务。jar(Java Archive)文件是Java平台的一种...
综上所述,通过深入理解和熟练运用百度地图API,开发者可以构建出功能强大的地图应用,提供精准的路线规划、多样的导航体验和精细的定位服务。在实际开发过程中,还需要关注性能优化、错误处理和兼容性问题,以确保...
百度地图 for iPhone是百度公司为您提供的全能出行助手。适用于iphone苹果手机。百度地图采用全新地图底图,拥有强大的路线查询及规划能力,支持公交、驾车、步行三种出行方式;支持浏览全国地图,支持快速定位。使用...
**百度定位Demo详解** 在移动应用开发中,位置服务是一个重要的功能,它...通过学习和实践这个“百度定位Demo”,开发者可以快速掌握如何在自己的应用中集成百度定位服务,为用户提供更加精准和便捷的位置相关功能。
最近由于项目需要,研究了下百度地图定位,他们提供的实例基本都是用监听器实现自动定位的。我想实现一种效果:当用户进入UI时,不定位,用户需要定位的时候,自己手动点击按钮,再去定位当前位置。经过2天研究和...
V2.0版本相比早期版本可能包含了更多优化和新特性,如更好的性能、更多的定制选项以及增强的定位和导航能力。通过这个API,开发者可以构建具有地图展示、位置检索、路径规划、实时交通查询等功能的应用。 **地图...
一旦加载,开发人员在编写与百度地图API相关的JavaScript代码时,将能够享受到智能提示带来的便利,例如,当输入函数名或对象属性时,IDE会自动列出可能的选项,减少手动查找文档的时间。 标签“VS2012”明确了这个...