如何使用Android调用百度地图API——实时定位

在Android开发中有一个非常重要的应用就是实时定位,通过手机在手机地图上进行实时定位,定位当前手机的位置,这个功能我们一般都可以用百度地图或者谷歌地图的api来实现,这些api代码要在百度或者谷歌的官网上下载,这里不再多说,本文以代码实例的方式展示如何使用百度地图的api,安卓开发者可以直接复制本文示例代码到项目中进行测试,本文仅仅是使用百度地图api的核心代码,如果要使用可能需要进行相关修改,具体参考代码请参看下文:

1.先来看看java代码,MainActivity.class参考代码如下:

  1 public  class MainActivity  extends MapActivity {
  2      // 初始位置设置为西安
  3      private  double userLongitude =  34 .341568 *  1E6; // 纬度
  4      private  double userLatitude =  108 .94017499999995 *  1E6; // 经度
  5      // 添加百度相关控件
  6      private MapView mapView;
  7      private BMapManager bMapManager; // 加载地图的引擎
  8      // 百度地图上的key值
  9      private String keyString =  "01331AFA954E7E300428A5F0C9C829E0E16F87A3";
 10      // 在百度地图上添加一些控件,例如放大、缩小
 11      private MapController mapController;
 12      private MKLocationManager mLocationManager;
 13
 14     @Override
 15      public  void onCreate(Bundle savedInstanceState) {
 16          super.onCreate(savedInstanceState);
 17         setContentView(R.layout.activity_main);
 18          // 实例化控件
 19         mapView = (MapView)  this.findViewById(R.id.bmapView);
 20         bMapManager =  new BMapManager(MainActivity. this);
 21          // 必须要加载key
 22         bMapManager.init(keyString,  new MKGeneralListener() {
 23              // key值不正确
 24             @Override
 25              public  void onGetPermissionState( int arg0) {
 26                  if (arg0 ==  300) {
 27                    Toast.makeText(MainActivity. this, R.string.key_error,Toast.LENGTH_LONG).show();
 28                 }
 29             }
 30              //网络出错
 31             @Override
 32              public  void onGetNetworkState( int arg0) {
 33                 Toast.makeText(MainActivity. this, R.string.net_error,Toast.LENGTH_LONG).show();
 34             }
 35         });
 36          this.initMapActivity(bMapManager);
 37         mapView.setBuiltInZoomControls( true); // 表示可以设置缩放功能
 38         mapController = mapView.getController();
 39          // 初始化Location模块
 40         mLocationManager = bMapManager.getLocationManager();
 41          // 通过enableProvider和disableProvider方法,选择定位的Provider
 42         mLocationManager.enableProvider(MKLocationManager.MK_NETWORK_PROVIDER);
 43         mLocationManager.disableProvider(MKLocationManager.MK_GPS_PROVIDER);
 44          //返回手机位置
 45         mLocationManager.requestLocationUpdates(locationListener);
 46         mLocationManager.setNotifyInternal( 52);
 47          // 添加定位图层
 48         MyLocationOverlay myLocationOverlay =  new MyLocationOverlay( this,mapView);
 49         myLocationOverlay.enableMyLocation();  // 启用定位
 50         myLocationOverlay.enableCompass();  // 启用指南针
 51         mapView.getOverlays().add(myLocationOverlay);
 52         mapView.setTraffic( true); // 交通地图
 53          // mapView.setSatellite(true);// 卫星地图
 54         mapController.setZoom( 15); // 设置缩放级别
 55         mapView.invalidate(); // 刷新地图
 56     }
 57      //获取经度纬度
 58      private LocationListener locationListener =  new LocationListener() {  
 59         @Override
 60          public  void onLocationChanged(Location location) {
 61              if (location !=  null) {  
 62                 userLatitude = location.getLatitude() *  1E6;  
 63                 userLongitude = location.getLongitude() *  1E6;
 64                 GeoPoint mypoint =  new GeoPoint(( int)(userLatitude), ( int)(userLongitude));
 65                 mapView.getController().animateTo(mypoint);  
 66             }
 67         }
 68     };
 69      // 销毁
 70     @Override
 71      protected  void onDestroy() {
 72          super.onDestroy();
 73          if (bMapManager !=  null) {
 74             bMapManager.destroy();
 75             bMapManager =  null;
 76         }
 77     }
 78      // 停止
 79     @Override
 80      protected  void onPause() {
 81          super.onPause();
 82          if (bMapManager !=  null) {
 83            mLocationManager.removeUpdates(locationListener);
 84            bMapManager.stop();
 85         }
 86     }
 87       // 重启
 88      @Override
 89       protected  void onResume() {
 90           super.onResume();
 91           if (bMapManager !=  null) {
 92             bMapManager.start();
 93          }
 94      }
 95      //
 96     @Override
 97      protected  boolean isRouteDisplayed() {
 98          return  false;
 99     }
100
101
102      // Menu
103      // 当点击Menu按钮时,调用该方法
104     @Override
105      public  boolean onCreateOptionsMenu(Menu menu) {
106          menu.add( 011, R.string.exit).setIcon(
107          android.R.drawable.ic_menu_close_clear_cancel);
108           return  super.onCreateOptionsMenu(menu);
109     }
110     @Override
111      public  boolean onContextItemSelected(MenuItem item) {  // 选中某个菜单项
112          if (item.getItemId() ==  1) {
113            MainActivity. this.finish();  
114         }
115          return  super.onOptionsItemSelected(item);
116     }
117      // 返回键  
118     @Override
119      public  boolean onKeyDown( int keyCode, KeyEvent event) {
120          if (keyCode == KeyEvent.KEYCODE_BACK) {       
121            finish();  
122         }
123          return  super.onKeyDown(keyCode, event);
124     }
125 }
126

2.布局文件,主要是添加显示地图的控件,activity_mainmain.xml参考代码如下:

  1 < LinearLayout  xmlns:android=" http://schemas.android.com/apk/res/android"
  2      xmlns:tools=" http://schemas.android.com/tools"
  3      android:layout_width=" match_parent"
  4      android:layout_height=" match_parent>
  5      <!-- 添加显示百度地图的控件 -- >
  6      < com.baidu.mapapi.MapView
  7          android:id=" @+id/bmapView"
  8          android:layout_width=" fill_parent"
  9          android:layout_height=" fill_parent"
 10          android:clickable=" true"
 11          tools:context=" .MainActivity" / >
 12 </ LinearLayout >

3.设置配置文件,AndroidManifest.xml参考代码如下:

  1 < manifest  xmlns:android=" http://schemas.android.com/apk/res/android"
  2      package=" yu.hong.map"
  3      android:versionCode=" 1"
  4      android:versionName=" 1.0>
  5      < uses-sdk  android:minSdkVersion=" 10android:targetSdkVersion=" 15" / >
  6      <!--添加百度地图开发授权  -- >
  7      < uses-permission  android:name=" android.permission.ACCESS_NETWORK_STATE" / >
  8      < uses-permission  android:name=" android.permission.WRITE_EXTERNAL_STORAGE" / >
  9      < uses-permission  android:name=" android.permission.ACCESS_WIFI_STATE" / >
 10      < uses-permission  android:name=" android.permission.CHANGE_WIFI_STATE" / >
 11      < uses-permission  android:name=" android.permission.ACCESS_FINE_LOCATION" / >
 12      < uses-permission  android:name=" android.permission.INTERNET" / >
 13      < uses-permission  android:name=" android.permission.READ_PHONE_STATE" / >
 14      <!--添加对屏幕的支持  -- >
 15      < supports-screens
 16          android:anyDensity=" true"
 17          android:largeScreens=" true"
 18          android:normalScreens=" true"
 19          android:resizeable=" true"
 20          android:smallScreens=" true" / >
 21      < application
 22          android:icon=" @drawable/ic_maplauncher"
 23          android:label=" @string/app_name"
 24          android:theme=" @style/AppTheme>
 25          < activity
 26              android:name=" .MainActivity"
 27              android:label=" @string/title_activity_main>
 28              < intent-filter >
 29                  < action  android:name=" android.intent.action.MAIN" / >
 30                  < category  android:name=" android.intent.category.LAUNCHER" / >
 31              </ intent-filter >
 32          </ activity >
 33      </ application >
 34 </ manifest >


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值