码迷,mamicode.com
首页 > 其他好文 > 详细

百度地图SDK V3.2 和百度定位SDK V4.2 完成定位功能

时间:2015-02-04 16:39:04      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:onreceivelocation不运行   百度地图   sdk   sdk v3.2   

百度地图SDK V3.2 和百度定位SDK V4.2 完成定位功能

1、要完成定位功能,不光是要下载百度地图SDK(baidumapapi_v3_2_0.jar ; libBaiduMapSDK_v3_2_0_15.so),还需要下载百度的定位SDK(locSDK_4.2.jar; liblocSDK4d.so),需要到官网下载如上述的库和jar包。并且需要将jar包右键添加到build path中

技术分享

2、需要在manifest.xml文件中添加需要的key,service以及权限。如果没有添加service。则定位服务无法启动,会造成回调onReceiveLocation 无法运行



下面我们直接来看代码:

在acticity中主要代码如下:


/**
     * 定位的客户端
     */
    private LocationClient mLocationClient;
    /**
     * 定位的监听器
     */
    public MyLocationListener mMyLocationListener;
    /**
     * 当前定位的模式
     */
    private LocationMode mCurrentMode = LocationMode.NORMAL;
    /***
     * 是否是第一次定位
     */
    private volatile boolean isFristLocation = true;
    
    
    /**
* 最新一次的经纬度
*/
private double mCurrentLantitude;
private double mCurrentLongitude;
/**
* 当前的精度
*/
private float mCurrentAccracy;


//初始化定位信息
private void initMyLocation()
{
// 定位初始化
mLocationClient = new LocationClient(this);

if(mLocationClient == null){
Log.i(TAG, "mLocationClient is null");
return;
}

mMyLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(mMyLocationListener);
// 设置定位的相关配置
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(5000);   //5s 定位一次
mLocationClient.setLocOption(option);
}


/**
* 实现实时定位回调监听
*/
public class MyLocationListener implements BDLocationListener
{
@Override
public void onReceiveLocation(BDLocation location)
{

Log.i(TAG, "onReceiveLocation");

// map view 销毁后不在处理新接收的位置
if (location == null || mMapView == null)
return;
// 构造定位数据
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(mXDirection).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mCurrentAccracy = location.getRadius();
// 设置定位数据
mBaiduMap.setMyLocationData(locData);
mCurrentLantitude = location.getLatitude();
mCurrentLongitude = location.getLongitude();
// 设置自定义图标
BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory
.fromResource(R.drawable.navi_map_gps_locked);      //显示的当前位置的图标资源
MyLocationConfiguration config = new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker);
mBaiduMap.setMyLocationConfigeration(config);

Log.i(TAG,"CURRENT LAT -> " + mCurrentLantitude + "; LON -> " + mCurrentLongitude);

// 第一次定位时,将地图位置移动到当前位置
if (isFristLocation)
{
isFristLocation = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());

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

MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory
.newMapStatus(mMapStatus);
// 改变地图状态
mBaiduMap.setMapStatus(mMapStatusUpdate);

//MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
//mBaiduMap.animateMapStatus(u);
}
}
}


@Override
protected void onStart()
{
// 开启图层定位
mBaiduMap.setMyLocationEnabled(true);
if (!mLocationClient.isStarted())
{
mLocationClient.start();
int i = mLocationClient.requestLocation(); 
Log.i(TAG, "mLocationClient started --> " + i);
}

super.onStart();
}


@Override
protected void onStop()
{
// 关闭图层定位
mBaiduMap.setMyLocationEnabled(false);
mLocationClient.stop();

super.onStop();
}



manifest.xml文件代码如下:

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


    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    
    <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" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
 


    <application
        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="
你申请的KEY" />
        
   
    <service <!--此处的sevice必须添加。不然定位回调onReceiveLocation会失败-->
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" 
            android:permission="android.permission.BAIDU_LOCATION_SERVICE">>
            <intent-filter>
                <action android:name="com.baidu.location.service_v4.2" > --> 4.2对应的是你的locSDK的版本
                </action>
            </intent-filter>
        </service>

        
        <activity
            android:name="com.example.getsmsinfo.MainActivity"
            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>








百度地图SDK V3.2 和百度定位SDK V4.2 完成定位功能

标签:onreceivelocation不运行   百度地图   sdk   sdk v3.2   

原文地址:http://blog.csdn.net/ajhsdj/article/details/43486737

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!