1. 程式人生 > >Android 百度地圖簡單定位

Android 百度地圖簡單定位

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

}