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

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

第一步:下载SDK和申请Key

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

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

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

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

第三步:申请key

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

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

然后选择创建应用

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

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

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

应用名称就是:

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

数字签名:

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

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

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

包名:

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

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

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

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

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

第四步:编码

《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" />

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

然后在加上

<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(直接复制,粘贴进去就行了)

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

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

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

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

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

《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(); 

     } 

 }

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

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

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

上一篇:raspberry pi 树莓派作为比特比矿机


下一篇:MySQL root账户密码设为“root”后执行命令提示ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.