注意:此代码的环境是:真机(系统版本为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. BZOJ 1024 生日快乐

    Description windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕.现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋 ...

  2. js/jquery/插件表单验证

    媳妇要学js,就收集一些资料给她. 1.js 表单验证 : http://hi.baidu.com/yanchao0901/item/161f563fb84ea5433075a1eb 2.jquery ...

  3. 优秀的开发者 vs. 差的开发者

    优秀的开发者是一个艺术家,一个享受创作过程的工匠.差的开发者只将自己当作负责产生代码的码农. 优秀的开发者了解客户的问题.差的开发者只了解手头的技术问题.优秀的开发者会不断努力去理解"为什么 ...

  4. 【转】设置SecureCRT会话的缓冲区大小

    原文网址:http://guanjianfeng.com/archives/1484 在使用SecureCRT操作设备时,默认的回滚行数为500行.可以通过打开[选项]->[会话选项]-> ...

  5. HDOJ(HDU) 2156 分数矩阵(嗯、求和)

    Problem Description 我们定义如下矩阵: 1/1 1/2 1/3 1/2 1/1 1/2 1/3 1/2 1/1 矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增. 请求 ...

  6. 暴力求解——POJ 1321 棋盘问题

    Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...

  7. runtime 如何实现 weak 属性

    出题者简介: 孙源(sunnyxx),目前就职于百度 整理者简介:陈奕龙(子循),目前就职于滴滴出行. 转载者:豆电雨(starain)微信:doudianyu 要实现 weak 属性,首先要搞清楚 ...

  8. the identity used to sign the executable is no longer valid.解决方法

    the identity used to sign the executable is no longer valid.解决方法 一.重新下载Provisioning Profile 1.到devel ...

  9. android 客户端 和 新浪微博如何打通的

    微博SDK 为开发者 提供访问oauth2.0 授权认证,并集合sso登录功能,使用第三方应用可通过 新浪微博的 登录操作 提供微博分享功能,可直接通过微博客户端分享微博 名词解释 AppKey 分配 ...

  10. 面向GC的Java编程

    转自http://hellojava.info/?p=341 HelloJava微信公众账号网站 面向GC的Java编程 Leave a reply 这是内部一个同事(沐剑)写的文章,国外有一家专门做 ...