編輯:關於Android編程
這裡使用講解的是androidStudio下開發android應用,實現百度地圖定位功能的輔助教程。
登入百度地圖API官方網站http://lbsyun.baidu.com/
在主頁中選擇開發->Android定位sdk,我們可以看到有很多的教程,包括教你獲取秘鑰,開發指南等等。具體我就不再贅述了,可以看上面的開發指南,這篇文章主要針對app中加入百度定位的一些細節方面的操作。
接著選擇相關下載->全部下載,進入之後可以看到如下界面。我們這裡只勾選全量定位即可。

點擊下載開發包,當然你也可以下載示例代碼和參考類。
下載好開發包之後可以解壓看到如下目錄結構:

有可能你會問這些是干嘛用的,其實這些都是動態鏈接庫,針對不同架構的android手機cpu百度編寫了不同的庫文件,目的是為了適配不同的CPU架構,如果你選擇了多個功能的開發包,會發現非常大,這時我們就得取捨,我們只要留下armeabi這個文件的庫就行了,基本上市面機子都ok。
接下來是將這些庫文件以及jar包導入到android工程中,如下操作,這裡就將百度地圖的動態鏈接庫全部導入到應用中吧,全部復制粘貼到libs目錄下:

將jar包選擇右鍵,Add As Library,這樣成功將jar包導入,圖中沒有顯示庫文件,是因為樓主截圖不是同一個工程導致。正常將會顯示出庫文件,請諒解。

當然你也可以通過Project Structure的方式將jar包導入,如下操作:


完成jar包的導入,可以看到在android工程的Gradle(Module:app)文件中看到如下的描述,這意味著,您的jar包導入成功了。

下面是導入後的libs目錄結構:

由於百度地圖定位需要用到動態鏈接庫,我們需要在Gradle(Module:app)文件中添加如下代碼:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}

還需要在Manifests文件中聲明服務以及配置秘鑰,如下:


對了,別忘了還要聲明一些權限,詳情請看官方開發指南
好了這樣百度地圖定位的准備工作就基本做好了。現在你就可以看百度的圖的開發指南,進行代碼的編寫
官方開發指南地址:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/getloc
作者在做自己項目時寫了個工具類,方便操作:
public class BDLocationUtils implements BDLocationListener {
private static BDLocationUtils bdLocationUtils;
public LocationClient mLocationClient = null;
private String describe = "";
private List locationPoiList = new ArrayList<>();
private List locationList = new ArrayList<>();
private String address;
public static BDLocationUtils newInstance(Context context) {
if (bdLocationUtils == null) {
bdLocationUtils = new BDLocationUtils(context);
}
return bdLocationUtils;
}
public BDLocationUtils(Context context) {
System.out.println("bdlocation");
mLocationClient = new LocationClient(context); //聲明LocationClient類
initLocation();
mLocationClient.registerLocationListener(this); //注冊監聽函數
mLocationClient.start();
}
/**
* 初始化位置獲取設置
*/
private void initLocation() {
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
);//可選,默認高精度,設置定位模式,高精度,低功耗,僅設備
option.setCoorType("bd09ll");//可選,默認gcj02;設置返回的定位結果坐標系
// int span = 1000;
//option.setScanSpan(span);//可選,默認0,即僅定位一次,設置發起定位請求的間隔需要大於等於1000ms才是有效的
option.setIsNeedAddress(true);//可選,設置是否需要地址信息,默認不需要
option.setOpenGps(false);//可選,默認false,設置是否使用gps
option.setLocationNotify(false);//可選,默認false,設置是否當gps有效時按照1S1次頻率輸出GPS結果
option.setIsNeedLocationDescribe(false);//可選,默認false,設置是否需要位置語義化結果,可以在BDLocation.getLocationDescribe裡得到,結果類似於“在北京天安門附近”
option.setIsNeedLocationPoiList(true);//可選,默認false,設置是否需要POI結果,可以在BDLocation.getPoiList裡得到
option.setIgnoreKillProcess(false);//可選,默認true,定位SDK內部是一個SERVICE,並放到了獨立進程,設置是否在stop的時候殺死這個進程,默認不殺死
option.SetIgnoreCacheException(false);//可選,默認false,設置是否收集CRASH信息,默認收集
option.setEnableSimulateGps(true);//可選,默認false,設置是否需要過濾gps仿真結果,默認需要
mLocationClient.setLocOption(option);
}
@Override
public void onReceiveLocation(BDLocation location) {
System.out.println("bdlocation listener。");
//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());
//latitude = location.getLatitude();
MyApplication.location.setLatitude(location.getLatitude());//緯度
sb.append("\nlontitude : ");
sb.append(location.getLongitude());//經度
MyApplication.location.setLatitude(location.getLongitude());
//longitude = location.getLongitude();
// sb.append("\nradius : ");
// sb.append(location.getRadius());
if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位結果
// sb.append("\nspeed : ");
// sb.append(location.getSpeed());// 單位:公裡每小時
// sb.append("\nsatellite : ");
// sb.append(location.getSatelliteNumber());
// sb.append("\nheight : ");
// sb.append(location.getAltitude());// 單位:米
// sb.append("\ndirection : ");
// sb.append(location.getDirection());// 單位度
sb.append("\naddr : ");
//sb.append(location.getAddrStr());
address = location.getAddrStr();
MyApplication.location.setAddress(address);
sb.append(address);
//Log.i("address:", address);
sb.append("\ndescribe : ");
sb.append("gps定位成功");
describe = "gps定位成功";
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 網絡定位結果
sb.append("\naddr : ");
address = location.getAddrStr();
sb.append(address);
MyApplication.location.setAddress(address);
//運營商信息
sb.append("\noperationers : ");
sb.append(location.getOperators());
sb.append("\ndescribe : ");
sb.append("網絡定位成功");
describe = "網絡定位成功";
} else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 離線定位結果
sb.append("\ndescribe : ");
sb.append("離線定位成功,離線定位結果也是有效的");
describe = "離線定位成功,離線定位結果也是有效的";
} else if (location.getLocType() == BDLocation.TypeServerError) {
sb.append("\ndescribe : ");
sb.append("服務端網絡定位失敗,可以反饋IMEI號和大體定位時間到loc-bugs@baidu.com,會有人追查原因");
describe = "服務端網絡定位失敗";
} else if (location.getLocType() == BDLocation.TypeNetWorkException) {
sb.append("\ndescribe : ");
sb.append("網絡不同導致定位失敗,請檢查網絡是否通暢");
describe = "服務端網絡定位失敗";
} else if (location.getLocType() == BDLocation.TypeCriteriaException) {
sb.append("\ndescribe : ");
sb.append("無法獲取有效定位依據導致定位失敗,一般是由於手機的原因,處於飛行模式下一般會造成這種結果,可以試著重啟手機");
describe = "無法獲取有效定位依據導致定位失敗,一般是由於手機的原因,處於飛行模式下一般會造成這種結果,可以試著重啟手機";
}
sb.append("\nlocationdescribe : ");
sb.append(location.getLocationDescribe());// 位置語義化信息
locationPoiList = location.getPoiList();// POI數據
if (locationPoiList != null) {
sb.append("\npoilist size = : ");
sb.append(locationPoiList.size());
locationList.clear();
for (Poi p : locationPoiList) {
sb.append("\npoi= : ");
sb.append(p.getId() + " " + p.getName() + " " + p.getRank());
locationList.add(p.getName());
}
//通知list數據更新
}
//提示定位結果
Log.i("BaiduLocationApiDem", sb.toString());
}
public void startLocation() {
mLocationClient.start();
}
public void stopLocation() {
mLocationClient.stop();
}
public List getLocationList() {
return locationList;
}
public String getAddress() {
return address;
}
public String getDescribe() {
return describe;
}
}
獲取您當前位置可能的地點:
bdLocationUtils = BDLocationUtils.newInstance(getApplicationContext()); bdLocationUtils.startLocation(); locationList = bdLocationUtils.getLocationList();
locationList存放著可能得地點
下面是獲取您當前位置的地點,屬於一個范圍地點,但不是具體的
bdLocationUtils.getAddress()
當你定位失敗的時候,你肯定想有提示一下,那麼可以調用如下代碼
String describe = bdLocationUtils.getDescribe();
這樣,describe就有你想要的信息。
注意,在你的activity中,finish時別忘了調用一下
bdLocationUtils.stopLocation();
以防止內存洩露。
如有問題,請留下您的腳印謝謝。
、
百度一鍵root怎麼獲取權限
百度一鍵root是一款很簡單清潔的軟件,很適合剛剛接觸root使用的群眾用。root就是讓你的獲取手機權限,然後處理一些手機系統本來無法處理的軟件,讓你的手
Android service進程保護
應用進程保活基本就是圍繞兩個方面來展開:1 盡量保證進程不被殺死。2 進程被殺死後復活。細分如下:1)Service重啟2)進程守護3)Receiver觸發4)Alarm
Android ViewPager實現動畫切換效果
概述ViewPager是Android開發中使用場景非常頻繁的控件,單一的動畫效果切換已經越來越不能滿足追求個性化的應用中。而ViewPager自身也帶有一個接口來處理頁
Android ADB詳細介紹及用法
Android ADB 用法adb 全稱是 Android Debug Bridge, 就是起到調試橋的作用。 用來操作android設備的閱讀目錄 adb