編輯:關於Android編程
本文使用Android Studio開發。
獲取定位信息相對簡單,我們只需要如下幾步:
第一步,注冊百度賬號,在百度地圖開放平台新建應用、生成API_KEY。這些就不細說了,請前往這裡:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/key
第二步,下載sdk,地址:http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download
第三步,建立Android Studio工程(略過不說),配置環境:
將解壓後的文件放入libs文件夾下,並在src/main下建立一個叫做jniLibs的文件夾,並把解壓後內的文件夾靠進去,如下圖:
第四步,將BaiduLBS_Android.jar加入環境變量(右鍵,Add As Library),並在app的build.gradle中的android中添加:
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
如圖:
第五步,在AndroidManifest.xml文件中聲明權限:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--網絡定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!--GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
並在application標簽中添加如下內容:
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="你申請的API key" /> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" />
第六步,測試代碼,獲取定位信息:
public class MainActivity extends AppCompatActivity { public LocationClient mLocationClient = null; public BDLocationListener myListener = new MyLocationListener(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startLocate(); } /** * 定位 */ private void startLocate() { mLocationClient = new LocationClient(getApplicationContext()); //聲明LocationClient類 mLocationClient.registerLocationListener(myListener); //注冊監聽函數 LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving );//可選,默認高精度,設置定位模式,高精度,低功耗,僅設備 option.setCoorType("bd09ll");//可選,默認gcj02,設置返回的定位結果坐標系 int span = 1000; option.setScanSpan(span);//可選,默認0,即僅定位一次,設置發起定位請求的間隔需要大於等於1000ms才是有效的 option.setIsNeedAddress(true);//可選,設置是否需要地址信息,默認不需要 option.setOpenGps(true);//可選,默認false,設置是否使用gps option.setLocationNotify(true);//可選,默認false,設置是否當GPS有效時按照1S/1次頻率輸出GPS結果 option.setIsNeedLocationDescribe(true);//可選,默認false,設置是否需要位置語義化結果,可以在BDLocation.getLocationDescribe裡得到,結果類似於“在北京天安門附近” option.setIsNeedLocationPoiList(true);//可選,默認false,設置是否需要POI結果,可以在BDLocation.getPoiList裡得到 option.setIgnoreKillProcess(false);//可選,默認true,定位SDK內部是一個SERVICE,並放到了獨立進程,設置是否在stop的時候殺死這個進程,默認不殺死 option.SetIgnoreCacheException(false);//可選,默認false,設置是否收集CRASH信息,默認收集 option.setEnableSimulateGps(false);//可選,默認false,設置是否需要過濾GPS仿真結果,默認需要 mLocationClient.setLocOption(option); //開啟定位 mLocationClient.start(); } private class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation 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) {// 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()); sb.append("\ndescribe : "); sb.append("gps定位成功"); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 網絡定位結果 sb.append("\naddr : "); sb.append(location.getAddrStr()); //運營商信息 sb.append("\noperationers : "); sb.append(location.getOperators()); sb.append("\ndescribe : "); sb.append("網絡定位成功"); } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 離線定位結果 sb.append("\ndescribe : "); sb.append("離線定位成功,離線定位結果也是有效的"); } else if (location.getLocType() == BDLocation.TypeServerError) { sb.append("\ndescribe : "); sb.append("服務端網絡定位失敗,可以反饋IMEI號和大體定位時間到[email protected],會有人追查原因"); } else if (location.getLocType() == BDLocation.TypeNetWorkException) { sb.append("\ndescribe : "); sb.append("網絡不同導致定位失敗,請檢查網絡是否通暢"); } else if (location.getLocType() == BDLocation.TypeCriteriaException) { sb.append("\ndescribe : "); sb.append("無法獲取有效定位依據導致定位失敗,一般是由於手機的原因,處於飛行模式下一般會造成這種結果,可以試著重啟手機"); } sb.append("\nlocationdescribe : "); sb.append(location.getLocationDescribe());// 位置語義化信息 List<Poi> list = location.getPoiList();// POI數據 if (list != null) { sb.append("\npoilist size = : "); sb.append(list.size()); for (Poi p : list) { sb.append("\npoi= : "); sb.append(p.getId() + " " + p.getName() + " " + p.getRank()); } } Log.e("描述:", sb.toString()); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
APK中的XML為何不能直接打開,是否只是簡單的二進制文件,難道被加密了?為什麼AXMLPrinter2反編譯的時候竟然報錯了,如何解決?&nbs
思路分析:1、在onMeasure中測量整個View的寬和高後,設置寬高2、獲取我們res的圖片資源後,在ondraw方法中進行繪制圓形圖片3、通過Handler發送Ru
Git上看到的一個蠻清爽的一個Dialog介紹給大家。實現效果個人感覺做的還是滿Q彈的如何使用? compile 'com.github.michae
大家都可以微信附近的人功能搜索附近正在使用微信的小伙伴,進行打招呼聊天,不過有些用戶反映自己無法被微信附近的人搜索到,微信附近的人看不到我怎麼辦,下面小編就