百度地图SDK5-基本设置

来源:互联网 发布:白苹果怎么备份数据 编辑:程序博客网 时间:2024/05/16 03:48
1。申请APIKEY      http://lbsyun.baidu.com/apiconsole/key?application=key
具体申请和配置环节百度讲的很清楚
2。先去百度地图下载最新的jar包和so文件BaiduLBS_AndroidSDK_Lib->libs覆盖到项目中  下载地址http://lbsyun.baidu.com/sdk/download
3。配置AndroidManifest.xml文件
(1)用户权限:
  <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
    <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.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_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.BROADCAST_STICKY" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />



(2)修改application标签
在name属性中添加一个新的application 例如:com.example.testlocationbaidumap.MyMapApplication
就是在项目中新建个一个class名字为MyMapApplication文件(前面的都是项目包名)
内容为:
package com.example.testlocationbaidumap;
import com.baidu.mapapi.SDKInitializer;
import android.app.Application;

public class MyMapApplication extends Application
{
public void onCreate() {
super.onCreate();
// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
SDKInitializer.initialize(this);
}
}
 


(3)在application标签下面添加
 <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="apikey" />//appkey为前面在百度地图官网申请的apikey



(4)在配置apikey的标签下面添加
<service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
  </service>

(5)首先写Activity的XML文件
在布局中添加一个mapview
<com.baidu.mapapi.map.MapView
    android:id="@+id/bmapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginTop="100dp"
        android:layout_below="@+id/button1"
        android:layout_alignTop="@+id/button1"
        android:layout_centerHorizontal="true"
        android:clickable="true" 
    />
(6)在Activity中
声明几个关键变量
public LocationClient mLocationClient=null;
public BDLocationListener mListener = new MyLocationListener();
public Button b1 ;
public double longitude;
public double latitude;
public float radius;
public MapView mapView;
public BaiduMap mBaiduMap;
然后在主线程中初始化LoccationClient
private void initLocationClient()
{
mLocationClient = new LocationClient(getApplicationContext());//
LocationClient的构造方法参数为Context
mLocationClient.registerLocationListener(mListener);//给
LocationClient注册监听器(下面会写)
LocationClientOption option = new LocationClientOption();//设置
LocationClient相关属性
option.setCoorType("bd09ll");//坐标编码方式  此处为百度坐标编码方式
option.setScanSpan(1000);//刷新间隔 毫秒为单位
option.setLocationMode(LocationMode.Hight_Accuracy);//高精度
mLocationClient.setLocOption(option);
}
接着初始化控件:
private void initMapView()
{
mapView = (MapView)findViewById(R.id.bmapView);
mBaiduMap = mapView.getMap();
}
然后就是核心代码了!!
mLocationClient.start();
if (mLocationClient != null && mLocationClient.isStarted())
{
mLocationClient.requestLocation();
//设置marker
LatLng point = new LatLng(38.933833 , 121.654824);//获取坐标也可以通过下面的方法获取当前坐标
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);//设置marker图片
OverlayOptions options = new MarkerOptions().position(point).icon(bitmapDescriptor);//设覆盖层相关属性
mBaiduMap.addOverlay(options);//添加覆盖层


//定义地图状态
MapStatus mMapStatus = new MapStatus.Builder().target(point).zoom(18).build();
//定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
//改变地图状态
mBaiduMap.setMapStatus(mMapStatusUpdate);

}
else 
Log.d("LocSDK4", "locClient is null or not started");

}


最后需要编写一个BDLocationListener,在这个类中可以获取很多信息,比如经纬度
class MyLocationListener implements BDLocationListener{

@Override
public void onReceiveLocation(BDLocation location)
{
if (location.getLatitude()==4.9E-324)
{//有时候获取的经纬度都是4.9E-324其实就是世界地图坐标系的原点,这说明
//获取经纬度失败直接退出就可以了或者提示获取失败请重新获取
return;
}
if (location == null)
return ;
StringBuffer sb = new StringBuffer(256);
sb.append("time : ");
sb.append(location.getTime());
sb.append("\nerror code : ");
sb.append(location.getLocType());
sb.append("\nlatitude : ");
//修改后的
//sb.append(location.getLatitude());
sb.append(latitude=location.getLatitude());
sb.append("\nlontitude : ");
//修改后的
//sb.append(location.getLongitude();
sb.append(longitude=location.getLongitude();
sb.append("\nradius : ");
sb.append(location.getRadius());
if (location.getLocType() == BDLocation.TypeGpsLocation){


/*如果按照下面的方式获取信息,那么结果得到的坐标都是0
因为 location.getLatitude() location.getLongitude();在取得一次数据后就变成0,上面的sb.append(location.getLatitude());.sb.append(location.getLongitude());已经获取了数据,所以在下面的再获取的时候得到的就是都是0;
//获取经纬度以及
latitude = location.getLatitude();
longitude = location.getLongitude();
// 此处设置开发者获取到的方向信息,顺时针0-36
radius = location.getRadius();               
*/


sb.append("\nspeed : ");
sb.append(location.getSpeed());
sb.append("\nsatellite : ");
sb.append(location.getSatelliteNumber());
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){
sb.append("\naddr : ");
sb.append(location.getAddrStr());

logMsg(sb.toString());
}

private void logMsg(String string)
{
Log.i("locationMsg", string);

}


最后别忘记写下mapView在Activity各个生命周期函数中的状态
protected void onPause() {
super.onPause();
// activity 暂停时同时暂停地图控件
mapView.onPause();
mLocationClient.stop();//停止定位
}

@Override
protected void onResume() {
super.onResume();
// activity 恢复时同时恢复地图控件
mapView.onResume();
}

@Override
protected void onDestroy() {
super.onDestroy();
// activity 销毁时同时销毁地图控件
mapView.onDestroy();
}


相关学习博客http://blog.csdn.net/lmj623565791/article/details/37730469
0 0