百度地圖
首先按官方文檔上的步驟做:
- 下載下傳官方的文檔,導jar包,我是用的eclipse做的,
-
在AndroidManifest中添加開發密鑰、所需權限等資訊;
(1)在application中添加開發密鑰
2)添加所需權限<application> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="開發者 key" /> </application>
第三步,在布局xml檔案中添加地圖控件;<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_SETTINGS" />
<com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />
- 第五步,建立地圖Activity,管理地圖生命周期;
這些都是官方文檔上面的東西,這樣是會出來一個地圖的public class MainActivity extends Activity { MapView mMapView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各元件之前初始化context資訊,傳入ApplicationContext //注意該方法要再setContentView方法之前實作 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); //擷取地圖控件引用 mMapView = (MapView) findViewById(R.id.bmapView); } @Override protected void onDestroy() { super.onDestroy(); //在activity執行onDestroy時執行mMapView.onDestroy(),實作地圖生命周期管理 mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity執行onResume時執行mMapView. onResume (),實作地圖生命周期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity執行onPause時執行mMapView. onPause (),實作地圖生命周期管理 mMapView.onPause(); } }
- 下面來看我的Demo
[java] view plain copy
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <com.baidu.mapapi.map.MapView
- android:id="@+id/bmapView"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:clickable="true" />
- <Button
- android:id="@+id/btn"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="普通" />
- <RadioGroup
- android:id="@+id/group"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentRight="true"
- android:background="#eee"
- android:orientation="vertical" >
- <RadioButton
- android:id="@+id/r1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="預設圖示" />
- <RadioButton
- android:id="@+id/r2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="自定義圖示" />
- </RadioGroup>
- </RelativeLayout>
這是主界面代碼 [java] view plain copy
- package com.example.map__;
- import java.util.List;
- import android.app.Activity;
- import android.graphics.Color;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.CompoundButton;
- import android.widget.RadioButton;
- import android.widget.RadioGroup;
- import android.widget.RadioGroup.OnCheckedChangeListener;
- import com.baidu.location.BDLocation;
- import com.baidu.location.BDLocationListener;
- import com.baidu.location.LocationClient;
- import com.baidu.location.LocationClientOption;
- import com.baidu.location.Poi;
- import com.baidu.mapapi.SDKInitializer;
- import com.baidu.mapapi.map.BaiduMap;
- import com.baidu.mapapi.map.BitmapDescriptor;
- import com.baidu.mapapi.map.BitmapDescriptorFactory;
- import com.baidu.mapapi.map.MapStatus;
- import com.baidu.mapapi.map.MapStatusUpdateFactory;
- import com.baidu.mapapi.map.MapView;
- import com.baidu.mapapi.map.MyLocationConfiguration;
- import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
- import com.baidu.mapapi.map.MyLocationData;
- import com.baidu.mapapi.model.LatLng;
- public class MainActivity extends Activity {
- private MapView mMapView;
- private BaiduMap mBaiduMap;
- private LocationClient mLocationClient;
- private Button requestLocButton;
- private RadioGroup group;
- private RadioButton r1;
- private RadioButton r2;
- private LocationMode mCurrentMode;
- private LocationClient mLocClient;
- public MyLocationListenner myListener = new MyLocationListenner();
- private BitmapDescriptor mCurrentMarker;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- // 在使用SDK各元件之前初始化context資訊,傳入ApplicationContext
- // 注意該方法要再setContentView方法之前實作
- SDKInitializer.initialize(getApplicationContext());
- setContentView(R.layout.activity_main);
- requestLocButton = (Button) findViewById(R.id.btn);
- group = (RadioGroup) findViewById(R.id.group);
- r1 = (RadioButton) findViewById(R.id.r1);r1.setChecked(true);
- r2 = (RadioButton) findViewById(R.id.r2);
- mCurrentMode = LocationMode.NORMAL;
- requestLocButton.setText("普通");
- //按鈕的一個監聽,改變改變定位圖示的模式
- OnClickListener btnClickListener=new OnClickListener() {
- @Override
- public void onClick(View v) {
- switch (mCurrentMode) {
- case NORMAL: //正常模式
- requestLocButton.setText("跟随");
- mCurrentMode=LocationMode.FOLLOWING;
- mBaiduMap
- .setMyLocationConfigeration(new MyLocationConfiguration(
- mCurrentMode, true, mCurrentMarker));
- break;
- case COMPASS: //羅盤模式
- requestLocButton.setText("普通");
- mCurrentMode = LocationMode.NORMAL;
- mBaiduMap
- .setMyLocationConfigeration(new MyLocationConfiguration(
- mCurrentMode, true, mCurrentMarker));
- break;
- case FOLLOWING: //跟随模式
- requestLocButton.setText("羅盤");
- mCurrentMode = LocationMode.COMPASS;
- mBaiduMap
- .setMyLocationConfigeration(new MyLocationConfiguration(
- mCurrentMode, true, mCurrentMarker));
- break;
- default:
- break;
- }
- }
- };
- requestLocButton.setOnClickListener(btnClickListener);
- OnCheckedChangeListener radioButtonListener = new OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(RadioGroup group, int checkedId) {
- if (checkedId==R.id.r1) {
- // 傳入null則,恢複預設圖示
- mCurrentMarker = null;
- mBaiduMap
- .setMyLocationConfigeration(new MyLocationConfiguration(
- mCurrentMode, true, null));
- }else if (checkedId==R.id.r2) {
- // 修改為自定義marker,即自定義圖示
- mCurrentMarker = BitmapDescriptorFactory
- .fromResource(R.drawable.ic_launcher);
- mBaiduMap
- .setMyLocationConfigeration(new MyLocationConfiguration(
- mCurrentMode, true, mCurrentMarker,
- Color.RED,Color.YELLOW ));
- }
- }
- };
- group.setOnCheckedChangeListener(radioButtonListener);
- mMapView = (MapView) findViewById(R.id.bmapView); //找到我們的地圖控件
- mBaiduMap = mMapView.getMap(); //獲得地圖
- mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); //設定為普通模式的地圖
- // 開啟定位圖層
- mBaiduMap.setMyLocationEnabled(true);
- mLocClient = new LocationClient(this); //定位用到的一個類
- mLocClient.registerLocationListener(myListener); //注冊監聽
- ///LocationClientOption類用來設定定位SDK的定位方式,
- LocationClientOption option = new LocationClientOption(); //以下是給定位設定參數
- option.setOpenGps(true); // 打開gps
- option.setCoorType("bd09ll"); // 設定坐标類型
- option.setScanSpan(1000);
- mLocClient.setLocOption(option);
- mLocClient.start();
- }
- boolean isFirstLoc = true; // 是否首次定位
- public class MyLocationListenner implements BDLocationListener {
- @Override
- public void onReceiveLocation(BDLocation location) {
- // map view 銷毀後不在處理新接收的位置
- if (location == null || mMapView == null) {
- return;
- }
- MyLocationData locData = new MyLocationData.Builder()
- .accuracy(location.getRadius())
- // 此處設定開發者擷取到的方向資訊,順時針0-360
- .direction(100).latitude(location.getLatitude())
- .longitude(location.getLongitude()).build();
- mBaiduMap.setMyLocationData(locData);
- if (isFirstLoc) {
- isFirstLoc = false;
- LatLng ll = new LatLng(location.getLatitude(),
- location.getLongitude());
- MapStatus.Builder builder = new MapStatus.Builder();
- builder.target(ll).zoom(18.0f);
- mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
- }
- }
- public void onReceivePoi(BDLocation poiLocation) {
- }
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- // 退出時銷毀定位
- mLocClient.stop();
- // 關閉定位圖層
- mBaiduMap.setMyLocationEnabled(false);
- mMapView.onDestroy();
- mMapView = null;
- }
- @Override
- protected void onResume() {
- super.onResume();
- // 在activity執行onResume時執行mMapView. onResume (),實作地圖生命周期管理
- mMapView.onResume();
- }
- @Override
- protected void onPause() {
- super.onPause();
- // 在activity執行onPause時執行mMapView. onPause (),實作地圖生命周期管理
- mMapView.onPause();
- }
- }