百度地图的学习

今天自己学着集成百度地图发现百度存在如下几个不足

百度 api老旧,下载了sdk,java文件还是报错,找不到类等等
新手引导很少,不知道如何下手,如何开始集成
教程细节(如代码)不是很完整,需要比对它的demo去完善诸如图片 布局文件 字符串等

言归正传


学习百度地图,最好先看下它的demo,在android它总共有三个demo,其中BaiduMapSDKDemo是比较值得好好地学习的,红色箭头所示,libs中的api manifest布局文件中的一些权限可以直接放入自己的项目中,当然可以根据自己项目的需求把不需要的libs包删除(记得修改百度秘钥为自己的)下图是怎样创建百度秘钥的方法

在运行的时候记得改变秘钥的值 




2016.4.22 总结今天学习的到的内容 ,重新的百度地图的集成流程有了一定的了解,认识了他的复杂性,不熟悉百度地图集成的新手往往会绕弯路,浪费大量的时间,要把百度集成到自己的项目,要一步一步来,不可能一下子就集成所有想要的功能,多研究demo和借鉴其他人更好的demo。


2016.4.23 今天的学习有些暴力,就是直接参照百度sample,把libs和一些配置文件,java文件拷贝,同时注意读懂百度的一些图 是关键,知道图代表的意思(依次点击显示的图片)。


相关代码


定位 地图

package com.pc.baidutest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
//import android.widget.RadioGroup;
import android.widget.SeekBar;
import android.widget.Toast;
//import android.widget.RadioGroup.OnCheckedChangeListener;

import java.util.ArrayList;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.GroundOverlayOptions;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BaiduMap.OnMarkerDragListener;
import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.model.LatLngBounds;

/**
 * 此demo用来展示如何结合定位SDK实现定位,并使用MyLocationOverlay绘制定位位置 同时展示如何使用自定义图标绘制并点击时弹出泡泡
 */
public class LocationDemo extends Activity {

	// 定位相关
	LocationClient mLocClient;
	public MyLocationListenner myListener = new MyLocationListenner();
	private LocationMode mCurrentMode;
	BitmapDescriptor mCurrentMarker;
	private static final int accuracyCircleFillColor = 0xAAFFFF88;
	private static final int accuracyCircleStrokeColor = 0xAA00FF00;

	MapView mMapView;
	BaiduMap mBaiduMap;

	// UI相关
//	OnCheckedChangeListener radioButtonListener;
	Button requestLocButton;
	boolean isFirstLoc = true; // 是否首次定位

	// 添加覆盖物的 点

	/**
	 * MapView 是地图主控件
	 */
	private Marker mMarkerA;
	private Marker mMarkerB;
	private Marker mMarkerC;
	private Marker mMarkerD;
	private InfoWindow mInfoWindow;
	private SeekBar alphaSeekBar = null;
	private CheckBox animationBox = null;

	// 初始化全局 bitmap 信息,不用时及时 recycle
	BitmapDescriptor bdA = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
	BitmapDescriptor bdB = BitmapDescriptorFactory.fromResource(R.drawable.icon_markb);
	BitmapDescriptor bdC = BitmapDescriptorFactory.fromResource(R.drawable.icon_markc);
	BitmapDescriptor bdD = BitmapDescriptorFactory.fromResource(R.drawable.icon_markd);
	BitmapDescriptor bd = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);
//	BitmapDescriptor bdGround = BitmapDescriptorFactory.fromResource(R.drawable.ground_overlay);

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_location);
		requestLocButton = (Button) findViewById(R.id.button1);
		mCurrentMode = LocationMode.NORMAL;
		requestLocButton.setText("普通");
		OnClickListener btnClickListener = new OnClickListener() {
			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);

		// 地图初始化
		mMapView = (MapView) findViewById(R.id.bmapView);
		mBaiduMap = mMapView.getMap();
		// 开启定位图层
		mBaiduMap.setMyLocationEnabled(true);
		// 定位初始化
		mLocClient = new LocationClient(this);
		mLocClient.registerLocationListener(myListener);
		LocationClientOption option = new LocationClientOption();
		option.setOpenGps(true); // 打开gps
		option.setCoorType("bd09ll"); // 设置坐标类型
		option.setScanSpan(1000);
		mLocClient.setLocOption(option);
		mLocClient.start();

		// 显示覆盖物

		initOverlay();
		// 覆盖物的点击事件
		mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {
			public boolean onMarkerClick(final Marker marker) {
				//这里的button是图标的背景
				Button button = new Button(getApplicationContext());
				button.setBackgroundResource(R.drawable.popup);
				OnInfoWindowClickListener listener = null;
				//标记marker点击的效果是移动位置
				if (marker == mMarkerA || marker == mMarkerD) {
					button.setText("更改位置");
					listener = new OnInfoWindowClickListener() {
						public void onInfoWindowClick() {
							LatLng ll = marker.getPosition();
							LatLng llNew = new LatLng(ll.latitude + 0.005, ll.longitude + 0.005);
							marker.setPosition(llNew);
							mBaiduMap.hideInfoWindow();
						}
					};
					//这里的button是图标的背景,但是这个背景button,会经过一个重新绘制
					LatLng ll = marker.getPosition();
					mInfoWindow = new InfoWindow(BitmapDescriptorFactory.fromView(button), ll, -47, listener);
					mBaiduMap.showInfoWindow(mInfoWindow);
				} 
				//标记marker移动的效果是更改图标
				else if (marker == mMarkerB) {
					button.setText("更改图标");
					button.setOnClickListener(new OnClickListener() {
						public void onClick(View v) {
							marker.setIcon(bd);
							mBaiduMap.hideInfoWindow();
						}
					});
					//重新绘制
					LatLng ll = marker.getPosition();
					mInfoWindow = new InfoWindow(button, ll, -47);
					mBaiduMap.showInfoWindow(mInfoWindow);
				} else if (marker == mMarkerC) {
					button.setText("删除");
					button.setOnClickListener(new OnClickListener() {
						public void onClick(View v) {
							//删除了marker不再显示
							marker.remove();
							mBaiduMap.hideInfoWindow();
						}
					});
					//重新绘制
					LatLng ll = marker.getPosition();
					mInfoWindow = new InfoWindow(button, ll, -47);
					mBaiduMap.showInfoWindow(mInfoWindow);
				}
				return true;
			}
		});

	}

	private void initOverlay() {

		// add marker overlay
		LatLng llA = new LatLng(31.382395, 120.59897);
		LatLng llB = new LatLng(31.482395, 120.09897);
		LatLng llC = new LatLng(31.582395, 120.89897);
		LatLng llD = new LatLng(31.682395, 120.39897);

		MarkerOptions ooA = new MarkerOptions().position(llA).icon(bdA).zIndex(9).draggable(true);

		mMarkerA = (Marker) (mBaiduMap.addOverlay(ooA));
		MarkerOptions ooB = new MarkerOptions().position(llB).icon(bdB).zIndex(9);

		mMarkerB = (Marker) (mBaiduMap.addOverlay(ooB));
		MarkerOptions ooC = new MarkerOptions().position(llC).icon(bdC).perspective(false).anchor(0.5f, 0.5f).rotate(30)
				.zIndex(9);

		mMarkerC = (Marker) (mBaiduMap.addOverlay(ooC));
		ArrayList<BitmapDescriptor> giflist = new ArrayList<BitmapDescriptor>();
		giflist.add(bdA);
		giflist.add(bdB);
		giflist.add(bdC);
		MarkerOptions ooD = new MarkerOptions().position(llD).icons(giflist).zIndex(9).period(10);

		mMarkerD = (Marker) (mBaiduMap.addOverlay(ooD));

	}

	/**
	 * 定位SDK监听函数
	 */
	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 onPause() {
		mMapView.onPause();
		super.onPause();
	}

	@Override
	protected void onResume() {
		mMapView.onResume();
		super.onResume();
	}

	@Override
	protected void onDestroy() {
		// 退出时销毁定位
		mLocClient.stop();
		// 关闭定位图层
		mBaiduMap.setMyLocationEnabled(false);
		mMapView.onDestroy();
		mMapView = null;

		// 回收 bitmap 资源
		bdA.recycle();
		bdB.recycle();
		bdC.recycle();
		bdD.recycle();
		bd.recycle();
//		bdGround.recycle();
		super.onDestroy();
	}

}


Application类


package com.pc.baidutest;

import com.baidu.mapapi.SDKInitializer;

import android.app.Application;

public class PetrolStationApplication extends Application {

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		SDKInitializer.initialize(getApplicationContext());
	}

}


manifest


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.pc.baidutest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />

    <!-- 百度需要的权限 -->

    <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" />
  <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
  
    <!-- 这个权限用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- 这个权限用于访问GPS定位 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 用于读取手机当前的状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 访问网络,网络定位需要上网 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:name = "com.pc.baidutest.PetrolStationApplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="4E8HXxnltyT9vIKKM1YivSTdhimGW1Ce" />
        
        

        <activity
            android:name=".LocationDemo"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
       
    </application>

</manifest>


下载链接  http://pan.baidu.com/s/1dFrxxz7




百度地图整理二:


百度地图的学习流程记录:

这里是首页和开发的一个简短动态图,开发基本上就是需要图片上所示的区域


涉及 到主页的sdk下载 文档的下载

开发中的 几个必须要去的页面



附一张开发图索引(简介):



ps: 是首页不是主页


开发文档图片(3.7.3是一个综合了许多功能的文档,其中就包括了定位,具体可以看概述):




百度整理三 


定位城市


文档:

http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/getloc


manifest


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jydev.myn">

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 这个权限用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <!-- 这个权限用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <!-- 用于读取手机当前的状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <!-- 访问网络,网络定位需要上网-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- SD卡读取权限,用户写入离线定位数据-->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>


    <application
        android:name=".activity.LocationApplication"
        android:allowBackup="true"
        android:icon="@mipmap/meiyaoni"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">

        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote"></service>

        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="百度key" />       //key:开发者申请的key

        <activity
            android:name="com.jydev.myn.activity.WelcomeAct"
            android:label="@string/app_name"
            android:theme="@style/Theme.AppCompat.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>
        </activity>

        <activity android:name="com.jydev.myn.activity.RegisterActivity" />
        <activity
            android:name="com.jydev.myn.activity.MainActivity"
            android:windowSoftInputMode="adjustPan|stateHidden" />
        <activity android:name="com.jydev.myn.activity.ForgetPdActivity" />
        <activity android:name="com.jydev.myn.activity.SearchActivity" />
        <activity android:name="com.jydev.myn.activity.CityActivity" />
        <activity android:name="me.nereo.multi_image_selector.MultiImageSelectorActivity" />


        <!--  <activity android:name=".activity.RegisterActivity" />
          <activity
              android:name=".activity.MainActivity"
              android:windowSoftInputMode="adjustPan|stateHidden"
              />
          <activity android:name=".activity.ForgetPdActivity" />
          <activity android:name="me.nereo.multi_image_selector.MultiImageSelectorActivity"/>
          <activity android:name=".activity.SearchActivity"/>-->

    </application>

</manifest>




java文件

package com.jydev.myn.activity;

import android.app.Activity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.baidu.location.service.LocationService;
import com.google.gson.Gson;
import com.jydev.myn.R;
import com.jydev.myn.bean.CityBean;
import com.jydev.myn.global.HttpUrl;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.nostra13.universalimageloader.utils.L;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.BDNotifyListener;//假如用到位置提醒功能,需要import该类
import com.baidu.location.Poi;

/**
 * Created by pc on 2016/5/5.
 */
public class CityActivity extends Activity {


    @ViewInject(R.id.city_back)
    ImageView cityBack;
    @ViewInject(R.id.txt_topbar)
    TextView txtTopbar;
    @ViewInject(R.id.ly_top_bar)
    RelativeLayout lyTopBar;
    @ViewInject(R.id.gps_city)
    TextView LocationResult;
    @ViewInject(R.id.lv_city)
    ListView lvCity;

    private List<CityBean.ListBean> list_spinner;
    private List<String> list1 = new ArrayList<String>();
    private static String[] m = null;
    private LocationService locationService;
    private Button startLocation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_city);
        ViewUtils.inject(this);
        getDataFromServer();
        initData();

//        LocationResult = (TextView) findViewById(R.id.textView1);
        LocationResult.setMovementMethod(ScrollingMovementMethod.getInstance());
//        startLocation = (Button) findViewById(R.id.addfence);
    }

    private void initData() {

        //返回
        cityBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        //定位


    }


    private void getDataFromServer() {

        //spinner数据
        HttpUtils http2 = new HttpUtils();
        http2.send(HttpRequest.HttpMethod.GET, HttpUrl.User_Spinner, new RequestCallBack<String>() {
            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {

                String str = responseInfo.result;
                L.d("HomePager", str);
                Gson gson = new Gson();

                CityBean cityBean = gson.fromJson(responseInfo.result, CityBean.class);

                list_spinner = cityBean.getList();

                Iterator it = list_spinner.iterator();
                StringBuffer stringBuffer = new StringBuffer();

                while (it.hasNext()) {
                    CityBean.ListBean listBean = (CityBean.ListBean) it.next();
                    String name = listBean.getName();
                    list1.add(name);
                }

                m = new String[list1.size()];
                m = list1.toArray(m);
                //适配器adapter,数据源data
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(CityActivity.this,
                        android.R.layout.simple_list_item_1, m);

                ListView listView = (ListView) findViewById(R.id.lv_city);
                //列表listView
                listView.setAdapter(adapter);

            }

            @Override
            public void onFailure(HttpException error, String msg) {

                L.d("HomePager", error.getExceptionCode() + ":" + msg);
            }
        });


    }

    /**
     * 显示请求字符串
     *
     * @param str
     */
    public void logMsg(String str) {
        try {
            if (LocationResult != null)
                LocationResult.setText(str);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /***
     * Stop location service
     */
    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        locationService.unregisterListener(mListener); //注销掉监听
        locationService.stop(); //停止定位服务
        super.onStop();
    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        // -----------location config ------------
        locationService = ((LocationApplication) getApplication()).locationService;
        //获取locationservice实例,建议应用中只初始化1个location实例,然后使用,可以参考其他示例的activity,都是通过此种方式获取locationservice实例的
        locationService.registerListener(mListener);
        //注册监听
        int type = getIntent().getIntExtra("from", 0);
        if (type == 0) {
            locationService.setLocationOption(locationService.getDefaultLocationClientOption());
        } else if (type == 1) {
            locationService.setLocationOption(locationService.getOption());
        }
//        startLocation.setOnClickListener(new View.OnClickListener() {
//
//            @Override
//            public void onClick(View v) {
//                if (startLocation.getText().toString().equals(getString(R.string.startlocation))) {
//                    locationService.start();// 定位SDK
//                    // start之后会默认发起一次定位请求,开发者无须判断isstart并主动调用request
//                    startLocation.setText(getString(R.string.stoplocation));
//                } else {
//                    locationService.stop();
//                    startLocation.setText(getString(R.string.startlocation));
//                }
//            }
//        });

        locationService.start();// 定位SDK
    }

    /*****
     * @see copy funtion to you project
     * 定位结果回调,重写onReceiveLocation方法,可以直接拷贝如下代码到自己工程中修改
     *
     */
    private BDLocationListener mListener = new BDLocationListener() {

        @Override
        public void onReceiveLocation(BDLocation location) {
            // TODO Auto-generated method stub
            if (null != location && location.getLocType() != BDLocation.TypeServerError) {
                StringBuffer sb = new StringBuffer(256);
//                sb.append("time : ");
                /**
                 * 时间也可以使用systemClock.elapsedRealtime()方法 获取的是自从开机以来,每次回调的时间;
                 * location.getTime() 是指服务端出本次结果的时间,如果位置不发生变化,则时间不变
                 */
//                sb.append(location.getTime());
//                sb.append("\nerror code : ");
//                sb.append(location.getLocType());
//                sb.append("\nlatitude : ");
//                sb.append(location.getLatitude());
//                sb.append("\nlontitude : ");
//                sb.append(location.getLongitude());
//                sb.append("\nradius : ");
//                sb.append(location.getRadius());
//                sb.append("\nCountryCode : ");
//                sb.append(location.getCountryCode());
//                sb.append("\nCountry : ");
//                sb.append(location.getCountry());
//                sb.append("\ncitycode : ");
//                sb.append(location.getCityCode());
//                sb.append("\ncity : ");
                sb.append(location.getCity());
//                sb.append("\nDistrict : ");
//                sb.append(location.getDistrict());
//                sb.append("\nStreet : ");
//                sb.append(location.getStreet());
//                sb.append("\naddr : ");
//                sb.append(location.getAddrStr());
//                sb.append("\nDescribe: ");
//                sb.append(location.getLocationDescribe());
//                sb.append("\nDirection(not all devices have value): ");
//                sb.append(location.getDirection());
//                sb.append("\nPoi: ");
//                if (location.getPoiList() != null && !location.getPoiList().isEmpty()) {
//                    for (int i = 0; i < location.getPoiList().size(); i++) {
//                        Poi poi = (Poi) location.getPoiList().get(i);
//                        sb.append(poi.getName() + ";");
//                    }
//                }
//                if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果
//                    sb.append("\nspeed : ");
//                    sb.append(location.getSpeed());// 单位:km/h
//                    sb.append("\nsatellite : ");
//                    sb.append(location.getSatelliteNumber());
//                    sb.append("\nheight : ");
//                    sb.append(location.getAltitude());// 单位:米
//                    sb.append("\ndescribe : ");
//                    sb.append("gps定位成功");
//                } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果
//                    // 运营商信息
//                    sb.append("\noperationers : ");
//                    sb.append(location.getOperators());
//                    sb.append("\ndescribe : ");
//                    sb.append("网络定位成功");
//                } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
//                    sb.append("\ndescribe : ");
//                    sb.append("离线定位成功,离线定位结果也是有效的");
//                } else if (location.getLocType() == BDLocation.TypeServerError) {
//                    sb.append("\ndescribe : ");
//                    sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");
//                } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
//                    sb.append("\ndescribe : ");
//                    sb.append("网络不同导致定位失败,请检查网络是否通畅");
//                } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
//                    sb.append("\ndescribe : ");
//                    sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");
//                }

                L.d("CityActivity",sb.toString());
                logMsg(sb.toString());

            }
        }

    };


}


libs



引入的包




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
因为最近项目需要,用了3个星期研究了一下百度地图的官方demo,并基于其源代码做了一定的修改,部分模仿了官方版的百度地图V5.3.1(version code: 431,目前最新版是6.0.1)的界面。现放出源代码供大家学习研究,修改版例子中的代码已经尽可能注释了,不过本人水平有限,代码质量可能有待提高,请大家勿用于商业用途,因为可能有很多未知BUG。觉得好的话请大家顶! 开发环境: eclipse:Android Developer Tools Build: v22.0.1-685705 JDK:java version "1.7.0_03" 测试环境: 三星GT-i9228 android2.3.6 主要改动: 1、LayersDemo里面把“普通图、卫星图及交通流量图”集成到了PreferencesActivity里面,修改立即生效。 2、MapControlDemo里面把“缩放级别、旋转、俯视”集成到了PreferencesActivity里面,修改立即生效。把截图功能加到了menu里面。 PS:这里顺便说一下新版百度地图怎么控制俯视角度,我查了好久,连官方的手势说明都没找到,被我无意之间发现了:两只手指同时向下滑为俯视,同时向上为恢复,当然也可以点击地图左上角的指南针 3、UISettingsDemo里面把“缩放、平移、双击放大、旋转” 开关手势功能和显示隐藏“缩放控件、指南针位置”UI控件集,成到了PreferencesActivity里面,修改立即生效。 4、LocationOverlayDemo里面增加了比例尺和自定义缩放控件。 5、OverlayDemo只做了位置修改,下面的两个才是重头戏。 6、RoutePlanDemo模仿了百度地图5.3.1的路径规划。 7、OfflineDemo模仿了百度地图5.3.1的离线地图,并集成到一个界面了。 如有问题请参照百度文档,或者联系我QQ472950043。 模仿的版本是百度地图5.3.1 ,大家有需要的话可以到豌豆荚下载历史版本里面下载baiduditu_431.apk

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值