轉載請註明出處:http://blog.csdn.net/u011569040/article/details/45741685
導入庫文件
在相關下載最新的庫文件。將so文件的壓縮文件解壓出來,把對應架構下的so文件放入開發者自己APP的對應架構下的文件夾中,建議全部放入,程序兼容性會大大提升,將locSDK_5.X.jar文件拷貝到工程的libs目錄下,這樣您就可以在程序中使用百度定位SDK了。
設置AndroidManifest.xml
在application標籤中聲明service組件,每個app擁有自己單獨的定位service
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>
【重要提醒】
定位SDKv3.1版本之後,以下權限已不需要,請取消聲明,否則將由於Android 5.0多帳戶系統加強權限管理而導致應用安裝失敗。
<uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></uses-permission>
聲明使用權限
<!-- 這個權限用於進行網絡定位--> <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> <!--允許應用讀取低級別的系統日誌文件 --> <uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
設置AcessKey
使用SDK5.0需要在Mainfest.xml設置Accesskey,設置有誤會引起定位和地理圍欄服務不能正常使用,必須進行Accesskey的正確設置。
設置AccessKey,在application標籤中加入
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="key" /> //key:開發者申請的key
Demo:點擊按鈕,Textview顯示經緯度。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.kai"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<!-- 這個權限用於進行網絡定位-->
<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>
<!--允許應用讀取低級別的系統日誌文件 -->
<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<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="IgbGlDMMDpQOQGZNbzERNtTu" />
<activity
android:name="com.example.kai.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>
<receiver android:name=".BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME"/>
</intent-filter>
</receiver>
</application>
</manifest>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="32dp"
android:text="Button" />
</RelativeLayout>
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
/**
* @author 依稀記得那一天
*通過百度定位SDK 獲取經緯度
*/
public class MainActivity extends Activity {
private LocationClient mLocationClient;
public MyLocationListener mMyLocationListener;
private Button startLocation;
//搜索結果顯示的textView
private TextView LocationResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LocationResult = (TextView)findViewById(R.id.textView1);
startLocation = (Button)findViewById(R.id.button1);
startLocation.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
InitLocation();
mLocationClient.start();
}
});
mLocationClient = new LocationClient(this.getApplicationContext());
mMyLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(mMyLocationListener);
}
protected void InitLocation() {
LocationClientOption option = new LocationClientOption();
//設置定位模式爲 網絡定位即 WIFI和基站定位
option.setLocationMode(LocationMode.Battery_Saving);
//設置座標系,返回的定位結果是百度經緯度
//gcj02爲國測局加密經緯度座標,bd9II爲百度加密經緯度座標,bd09爲百度加密墨卡託座標
option.setCoorType("gcj02");
//設置發起定位請求的間隔時間爲5000ms
option.setScanSpan(5000);
//反地理編碼是否打開
option.setIsNeedAddress(true);
mLocationClient.setLocOption(option);
}
/**
* 實現實位回調監聽
*/
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
//Receive Location
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("\nlontitude : ");
sb.append(location.getLongitude());
sb.append("\nradius : ");
sb.append(location.getRadius());
if (location.getLocType() == BDLocation.TypeGpsLocation){
sb.append("\nspeed : ");
sb.append(location.getSpeed());
sb.append("\nsatellite : ");
sb.append(location.getSatelliteNumber());
sb.append("\ndirection : ");
sb.append("\naddr : ");
sb.append(location.getAddrStr());
sb.append(location.getDirection());
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){
sb.append("\naddr : ");
sb.append(location.getAddrStr());
//運營商信息
sb.append("\noperationers : ");
sb.append(location.getOperators());
}
logMsg(sb.toString());
Log.i("BaiduLocationApiDem", sb.toString());
}
}
/**
* 顯示請求字符串
* @param str
*/
public void logMsg(String str) {
try {
if (LocationResult != null)
LocationResult.setText(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Demo下載:http://download.csdn.net/detail/u011569040/8702411