百度地圖SDK V3.2 和百度定位SDK V4.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>








發佈了57 篇原創文章 · 獲贊 3 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章