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

来源:互联网 发布:三国志9全武将数据 编辑:程序博客网 时间:2024/06/05 08:02

在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>


0 0
原创粉丝点击