注意:此代码的环境是:真机(系统版本为Android4.2.2)+WIFI联网(才能实现最后的运行结果);使用虚拟机调试会出现各种问题。

第一步:下载SDK和申请Key

到百度的网站http://developer.baidu.com/map/

第二步:然后选择SDK下载。(根据需要下载需要的SDK)

第三步:申请key

http://developer.baidu.com/map/index.php?title=androidsdk

然后选择创建应用

需要填写:应用名称和数字签名(SHA1)和包名

应用名称就是:

数字签名:

菜单栏中的window--------->Preferences---------->Build

包名:

填进去之后就会自动生成。

生成一个访问AK,这个AK,一定要记住。

第四步:编码

《1》配置文件manifest.xml中加上权限

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

<uses-permission android:name="android.permission.USE_CREDENTIALS"/> 

<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/> 

<usespermissionandroid:name="android.permission.AUTHENTICATE_ACCOUNTS"/> 

<usespermissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/> 

<uses-permission android:name="android.permission.INTERNET" /> 

<usespermission android:name="com.android.launcher.permission.READ_SETTINGS" /> 

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

<uses-permission android:name="android.permission.BROADCAST_STICKY" /> 

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

然后把刚才申请的key加上去:

<meta-data 

      android:name="com.baidu.lbsapi.API_KEY" 

       android:value="你申请的key" />

然后在加上

<service

    android:name="com.baidu.location.f"

    android:enabled="true"

    android:process=":remote" >

</service>

《2》布局文件添加百度地图的布局:

<com.baidu.mapapi.map.MapView 

        android:id="@+id/bmapview" 

        android:layout_width="match_parent" 

        android:layout_height="match_parent" 

        android:clickable="true" /> 

《3》在libs文件夹下添加刚才下载的SDK(直接复制,粘贴进去就行了)

然后在把百度地图的JAR也添加到路径中去:

右键项目----------->Properties------>Java Build Path---->Libraries

添加进去之后,就可以了。

《4》MainActivity.java编码(头部的包就不写了,需要用到什么,自己添加):

 public class MainActivity extends Activity {

     //百度地图控件,专门显示地图用的控件

      private MapView mMapView = null; 

         // 百度地图对象,抽象的地图对象

         private BaiduMap bdMap; 

         //定位模式

         private LocationMode currentMode;

         //定位客户端

         private LocationClient locClient;

         //定位图标

         private Marker marker1;

         //经纬度

         private double latitude, longitude;

      // 记录是否第一次定位

        private boolean isFirstLoc = true;

        //地图上添加的定位图标

        BitmapDescriptor bitmap;

        //定位监听器

        //BDLocationListener locListener;

     @Override

 protected void onCreate(Bundle savedInstanceState) {

     //保存之前Activity状态

         super.onCreate(savedInstanceState);

         // SDK初始化

         SDKInitializer.initialize(getApplicationContext()); 

 //设置android程序没有标题

         requestWindowFeature(Window.FEATURE_NO_TITLE);

 //显示布局界面

         setContentView(R.layout.activity_main);

 //获得显示地图的控件

         mMapView = (MapView) findViewById(R.id.bmapview);

          //tv_show=(TextView)findViewById(R.id.tv_show);

   //在地图上显示的那个小图标

        bitmap = BitmapDescriptorFactory   

               .fromResource(R.drawable.icon_marka);

         init();

     }

 private void init() {        

     //定义地图状态

     MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);

     //获得地图对象

         bdMap = mMapView.getMap();     

         //LatLng cenpt=new LatLng(30.963175f,120.400244f);

         //BDLocation location;

         //latitude = location.getLatitude();

        // LatLng cenpt = new LatLng(location.getLatitude(),location.getLongitude());

 //        OverlayOptions options = new MarkerOptions()   

 //        .position(cenpt)   

 //        .icon(bitmap);

 //        MapStatus mMapStatus=new MapStatus.Builder()

 //        .target(cenpt)

 //        .zoom(18)

 //        .build();

         //普通地图   

         bdMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

        // MapStatusUpdate msu = MapStatusUpdateFactory.newMapStatus(mMapStatus);

        //设置地图初始状态

         bdMap.setMapStatus(msu);

         //bdMap.addOverlay(options);

 //        bdMap = new BaiduMap.Map("container", {mapType:BaiduMap.MAP_TYPE_NORMAL});

 //        map.setCurrentCity("北京市");

 //        map.centerAndZoom(new bdMap.Point(116.404, 39.915), 18);

        //当前定位模式为:普通

         currentMode = LocationMode.NORMAL;

         // 开启定位图层

         bdMap.setMyLocationEnabled(true);

         //定位服务的客户端

         locClient = new LocationClient(this);

         //注册监听函数

         locClient.registerLocationListener(locListener);

             //配置LocationClient这个定位客户端的定位参数

             LocationClientOption option = new LocationClientOption();

             option.setOpenGps(true);// 打开gps

             option.setCoorType("bd09ll");// 设置坐标类型

             option.setAddrType("all");//设置地址类型

             option.setScanSpan(1000);//1s后定位

             //配置客户端

             locClient.setLocOption(option);

             //启动定位(这一步很重要,不然前边注册的那个监听函数就没用了)

             locClient.start();

      }

     //这个是就是定位的监听函数(获取定位坐标,在坐标上显示图标)

     BDLocationListener locListener = new BDLocationListener(){

      @Override

      public void onReceiveLocation(BDLocation location) {

       if (location == null ||  mMapView == null)

             return ;

            // 构造定位数据

        MyLocationData locData = new MyLocationData.Builder()

               .accuracy(location.getRadius())//

               .direction(100)// 方向

               .latitude(location.getLatitude())//

               .longitude(location.getLongitude())//

               .build();

            // 获得经纬度

            latitude = location.getLatitude();

            longitude = location.getLongitude();

            //设置定位数据

            bdMap.setMyLocationData(locData);

            // 第一次定位的时候,那地图中心店显示为定位到的位置

            LatLng cenpt = new LatLng(latitude,longitude);

            //定义覆盖物的坐标和使用的图标

            OverlayOptions options = new MarkerOptions()   

             .position(cenpt)

             .icon(bitmap);

            //在地图上添加覆盖物

            bdMap.addOverlay(options);

            if (isFirstLoc) {

               isFirstLoc = false;

               LatLng ll = new LatLng(location.getLatitude(),

                      location.getLongitude());

            // MapStatusUpdate描述地图将要发生的变化

        MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll);

            //更新地图状态

               bdMap.animateMapStatus(msu);

               // bdMap.setMyLocationEnabled(false);

               //reverseGeoCode(cenpt);

               //显示地址信息

               Toast.makeText(getApplicationContext(), location.getAddrStr(),

                      Toast.LENGTH_SHORT).show();

                      }

                   }  

        };    

     @Override 

     protected void onResume() { 

         super.onResume(); 

         mMapView.onResume(); 

     } 

     @Override 

     protected void onPause() { 

         super.onPause(); 

         mMapView.onPause(); 

     } 

     @Override 

     protected void onDestroy() { 

         mMapView.onDestroy(); 

         mMapView = null; 

         super.onDestroy(); 

     } 

 }

下图是定位显示的定位结果

源码下载:http://pan.baidu.com/s/1jGlP32Q

android中百度地图定位的实现方法(仅适用于真机+WIFI联网环境)的更多相关文章

  1. Android使用百度地图定位并显示手机位置后使用前置摄像头“偷拍”

    今天老板让我验证一下技术可行性,记录下来. 需求 :定位手机的位置并在百度地图上显示,得到位置后使用前置摄像头进行抓拍 拿到这个需求后,对于摄像头的使用不太熟悉,于是我先做了定位手机并在百度地图上显示 ...

  2. Android使用百度地图定位

    下面事例是使用Android平台的部分代码.对于这个平台百度的开放人员已经写了完整的demo,把工程导入到eclipse中之后一般没有错误,如果报错的话,eclipse也会给出提示.一般可以通过将pr ...

  3. iOS 学习笔记五 【2016年百度地图定位详细使用方法】

    具体介和配置绍在此就不详述了,详情请看百度地图API文档, 在这里具体讲解下,新版百度地图的定位与反地理编码的使用: 1.导入头文件 #import <BaiduMapAPI_Map/BMKMa ...

  4. android 中百度地图 关于地图缩放所调用的事件

    在做百度地图的时候 javascript 有个地图缩放的事件 但是在android 的API里面却没有,但是还好  官方给了一个MapStatusChangeListener,是这样介绍的 百度地图S ...

  5. Android利用百度地图定位

    百度地图照着百度的教程做的总是出现报错 请帮我看看错误在那 2013-12-13 15:16168海军 | 分类:百度地图 | 浏览1252次 java.lang.RuntimeException: ...

  6. 兔子--android中百度地图的开发

    效果: API Key的申请地址:http://lbsyun.baidu.com/apiconsole/key 申请注意事项: 安全码:以下界面的SHA1  fingerprint值+;+包名 比如: ...

  7. Android使用百度地图出现闪退及定位时显示蓝屏问题

     目录 1.Android使用百度地图出现闪退 2.Android使用百度地图定位出现蓝屏问题     1.Android使用百度地图出现闪退 一般情况下出现闪退是在AndroidManifest.x ...

  8. Android 百度地图定位(手动+自动) 安卓开发教程

    近由于项目需要,研究了下百度地图定位,他们提供的实例基本都是用监听器实现自动定位的.我想实现一种效果:当用户进入UI时,不定位,用户需要定位的时候,自己手动点击按钮,再去定位当前位置.  经过2天研究 ...

  9. Android studio 百度地图开发(2)地图定位

    Android studio 百度地图开发(2)地图定位 email:chentravelling@163.com 开发环境:win7 64位,Android Studio,请注意是Android S ...

随机推荐

  1. hadoop 异常 INFO ipc.Client: Retrying connect to server:

    // :: INFO ipc.Client: Retrying connect to server: master/. Already tried , sleepTime= SECONDS) // : ...

  2. BZOJ 1059 矩阵游戏

    Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个\(N \times N\)黑白方阵进行(如同国际象棋一般,只是颜色是随意的). ...

  3. Borg Maze

    poj3026:http://poj.org/problem?id=3026 题意:在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用 ...

  4. C语言宏定义使用技巧

    写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等.下面列举一些成熟软件中常用得宏定义...... 1.防止一个头文件被重复包含 #ifndef COMDEF_ ...

  5. java 修饰符的作用一(public protected default private 组)

    1.public protected default private 组 public 权限最大,同类,同包,不同包,同包子类父类之间,不同包子类父类之间都可以访问. java 默认的权限是defau ...

  6. GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流

    最近听同事说他都在使用GitHub,GitHub是程序员的社区,在里面可以学到很多书上学不到的东西,所以最近在准备入手这方面的知识去尝试学习,正好碰到这么详细完整的文章,就转载了,希望对自己和大家有帮 ...

  7. mysql 树形数据,层级数据Managing Hierarchical Data in MySQL

    原文:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ 引言 大多数用户都曾在数据库中处理过分层数据(hiera ...

  8. 【转】android JNI

    原文网址:http://jinguo.iteye.com/blog/696185 Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码 ...

  9. 嵌入式设备web服务器比较

    目录(?)[-] Boa Thttpd Mini_httpd Shttpd Lighttpd Goahead AppWeb Apache 开发语言和开发工具 结论 备注   现在在嵌入式设备中所使用的 ...

  10. UVAlive2531 The K-League(最大流)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33451 [思路] 最大流. 大体思路是枚举每个队伍,最大流判断是否 ...