zoukankan      html  css  js  c++  java
  • 安卓开发_慕课网_百度地图_实现定位

    学习内容来自“慕课网”

    在上一学习内容的基础上改进代码,需要学习定位功能的同学请先将我的上一篇百度地图基础的学习一下

    http://www.cnblogs.com/xqxacm/p/4337054.html

    第一次学习百度地图的定位功能,理解不深,相应注释都在代码中写出了

    MainActivity.java

      1 package com.example.map;
      2 
      3 import com.baidu.location.BDLocation;
      4 import com.baidu.location.BDLocationListener;
      5 import com.baidu.location.LocationClient;
      6 import com.baidu.location.LocationClientOption;
      7 import com.baidu.mapapi.SDKInitializer;
      8 import com.baidu.mapapi.map.BaiduMap;
      9 import com.baidu.mapapi.map.MapStatusUpdate;
     10 import com.baidu.mapapi.map.MapStatusUpdateFactory;
     11 import com.baidu.mapapi.map.MapView;
     12 import com.baidu.mapapi.map.MyLocationConfiguration;
     13 import com.baidu.mapapi.map.MyLocationData;
     14 import com.baidu.mapapi.model.LatLng;
     15 import com.example.map.R;
     16 
     17 import android.location.Location;
     18 import android.os.Bundle;
     19 import android.app.Activity;
     20 import android.content.Context;
     21 import android.graphics.Bitmap;
     22 import android.view.Menu;
     23 import android.view.MenuItem;
     24 import android.view.Window;
     25 import android.widget.Toast;
     26 
     27 public class MainActivity extends Activity {
     28     
     29     private MapView mMapView = null;
     30     private BaiduMap mBaiduMap;
     31     //简化代码            用于this.context=this;
     32     private Context context;
     33     //定位相关
     34     private LocationClient mLocationClient;
     35     private MyLocationListener mLocationListener;
     36     //是否第一次定位的标志
     37     private boolean isFirstIn = true;
     38     //定位经纬度
     39     private double mLatitude;
     40     private double mLongtitude;
     41     
     42     @Override
     43     protected void onCreate(Bundle savedInstanceState) {
     44         super.onCreate(savedInstanceState);
     45       //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
     46         //注意该方法要再setContentView方法之前实现  
     47         SDKInitializer.initialize(getApplicationContext());  
     48         
     49         requestWindowFeature(Window.FEATURE_NO_TITLE);
     50         setContentView(R.layout.activity_main);
     51         this.context = this;
     52         initView();
     53         //初始化定位
     54         initLocation();
     55         
     56     }
     57     
     58     private void initView() {
     59         // TODO Auto-generated method stub
     60         mMapView = (MapView) findViewById(R.id.bmapView);
     61         mBaiduMap = mMapView.getMap();
     62         //设置打开时的显示比列  这里显示500m左右
     63         MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f); 
     64         mBaiduMap.setMapStatus(msu);
     65         }
     66     private void initLocation() {
     67         // TODO Auto-generated method stub
     68         mLocationClient = new LocationClient(this);
     69         mLocationListener = new MyLocationListener();
     70         mLocationClient.registerLocationListener(mLocationListener);
     71         LocationClientOption option = new LocationClientOption();
     72         option.setCoorType("bd09ll");
     73         option.setIsNeedAddress(true);
     74         option.setOpenGps(true);
     75         option.setScanSpan(1000);
     76         
     77         mLocationClient.setLocOption(option);
     78     }
     79     //activity销毁时百度地图也销毁
     80     @Override  
     81     protected void onDestroy() {   
     82         super.onDestroy();  
     83         //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
     84         mMapView.onDestroy();  
     85     }  
     86     @Override
     87     protected void onStart() {
     88         // TODO Auto-generated method stub
     89         super.onStart();
     90         // 开启定位
     91         mBaiduMap.setMyLocationEnabled(true);
     92         if (!mLocationClient.isStarted())
     93             mLocationClient.start();
     94             
     95     }
     96     @Override
     97     protected void onStop() {
     98         // TODO Auto-generated method stub
     99         super.onStop();
    100         // 停止定位
    101         mBaiduMap.setMyLocationEnabled(false);
    102         mLocationClient.stop();
    103     }
    104     @Override  
    105     protected void onResume() {  
    106         super.onResume();  
    107         //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
    108         mMapView.onResume();  
    109         }  
    110     @Override  
    111     protected void onPause() {  
    112         super.onPause();  
    113         //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
    114         mMapView.onPause();  
    115         }  
    116     @Override
    117     public boolean onCreateOptionsMenu(Menu menu) {
    118         // TODO Auto-generated method stub
    119         
    120         getMenuInflater().inflate(R.menu.main, menu);
    121         return true;
    122     }
    123     //菜单按钮的响应事件
    124     @Override
    125     public boolean onOptionsItemSelected(MenuItem item) {
    126         // TODO Auto-generated method stub
    127         switch (item.getItemId()) {
    128         case R.id.id_map_common:
    129             mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
    130             break;
    131         case R.id.id_map_site:
    132             mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
    133             break;
    134         case R.id.id_map_traffic:
    135             if(mBaiduMap.isTrafficEnabled())
    136             {
    137                 mBaiduMap.setTrafficEnabled(false);
    138                 item.setTitle("实时交通(off)");
    139             }
    140             else
    141             {
    142                 mBaiduMap.setTrafficEnabled(true);
    143                 item.setTitle("实时交通(on)");
    144             }
    145             break;
    146         case R.id.id_map_location:
    147             //定位最新自己的位置
    148             centerToMyLocation();
    149             break;
    150 
    151         default:
    152             break;
    153         }
    154         return super.onOptionsItemSelected(item);
    155     }
    156     //进到自己的位置
    157     private void centerToMyLocation() {
    158         LatLng latLng = new LatLng(mLatitude,mLongtitude);
    159         
    160         MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
    161         mBaiduMap.animateMapStatus(msu);
    162     }
    163     private class MyLocationListener implements BDLocationListener{
    164 
    165         @Override
    166         public void onReceiveLocation(BDLocation location) {
    167             // TODO Auto-generated method stub
    168             MyLocationData data = new MyLocationData.Builder()//
    169             .accuracy(location.getRadius())//
    170             .latitude(location.getLatitude())//
    171             .longitude(location.getLongitude())//
    172             .build();
    173     mBaiduMap.setMyLocationData(data);
    174     //获取最新经纬度
    175     mLatitude = location.getLatitude();
    176     mLongtitude = location.getLongitude();
    177     //判断是否第一次定位
    178     if (isFirstIn)
    179     {
    180         //设置经纬度
    181         LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());
    182         
    183         MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
    184         mBaiduMap.animateMapStatus(msu);
    185         //将是否第一次定位的标志 变为不是第一次定位
    186         isFirstIn = false;
    187         //显示当前定位的位置
    188         Toast.makeText(context, location.getAddrStr(),
    189                 Toast.LENGTH_SHORT).show();
    190     }
    191 
    192         }
    193         
    194     }
    195 }
    MainActivity.java

    菜单对应的文件

    位置位于:res-menu-main.xml

     1 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
     2 
     3     <item
     4         android:id="@+id/id_map_common"
     5         
     6         android:showAsAction="never"
     7         android:title="普通地图"/>
     8     <item
     9         android:id="@+id/id_map_site"
    10         
    11         android:showAsAction="never"
    12         android:title="卫星地图"/>
    13     <item
    14         android:id="@+id/id_map_traffic"
    15         
    16         android:showAsAction="never"
    17         android:title="实时交通(off)"/>
    18     <item
    19         android:id="@+id/id_map_location"
    20         
    21         android:showAsAction="never"
    22         android:title="定位我的位置"/>
    23 
    24 </menu>
    main.xml

    要注意的是 在AndroidManifest.xml文件中 需要加入几段代码

    1 <service
    2             android:name="com.baidu.location.f"
    3             android:enabled="true"
    4             android:process=":remote" >
    5             <intent-filter>
    6                 <action android:name="com.baidu.location.service_v2.2" >
    7                 </action>
    8             </intent-filter>
    9         </service>

    具体位置:

     1 <application
     2         android:allowBackup="true"
     3         android:icon="@drawable/ic_launcher"
     4         android:label="@string/app_name"
     5         android:theme="@style/AppTheme" >   
     6           <meta-data  
     7             android:name="com.baidu.lbsapi.API_KEY"  
     8             android:value="N6RKiEDLzPFGdqVTfsf7h5GD" />  
     9         <activity
    10             android:name="com.example.map.MainActivity"
    11             android:label="@string/app_name" >
    12             <intent-filter>
    13                 <action android:name="android.intent.action.MAIN" />
    14 
    15                 <category android:name="android.intent.category.LAUNCHER" />
    16             </intent-filter>
    17         </activity>
    18         <service
    19             android:name="com.baidu.location.f"
    20             android:enabled="true"
    21             android:process=":remote" >
    22             <intent-filter>
    23                 <action android:name="com.baidu.location.service_v2.2" >
    24                 </action>
    25             </intent-filter>
    26         </service>
    27         
    28     </application>
    需要另外加入代码的放置位置

    效果图:

     显示进入activity后定位到自己当前位置的效果

      菜单项中“定位我的位置” 点击后 地图调至手机当前坐标位置

  • 相关阅读:
    Linux下安装配置词典GoldenDict
    ubuntu 安装LaTex
    ubuntu 安装Opencv2.4.7
    Ubuntu 安装Matlab2010a
    Ubuntu 挂载ISO文件的方法
    ubuntu安装Java jdk1.7.0
    VDI转vmdk(VirtualBox与VMware硬盘格式转换)[转]
    oracle忘记密码,修改密码,解锁
    SQL Server 2008中文企业版下载地址和序列号[转]
    HTTP 错误 500.19 – Internal Server Error web.config 文件的 system.webServer/httpErrors 节中不允许绝对物理路径“C:inetpubcusterr”[转]
  • 原文地址:https://www.cnblogs.com/xqxacm/p/4338217.html
Copyright © 2011-2022 走看看