日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 位置服务——BaiduLocation的使用

發布時間:2023/12/20 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 位置服务——BaiduLocation的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Android 位置服務——BaiduLocation的使用 原文:Android 位置服務——BaiduLocation的使用

版權聲明:本文為博主原創文章,歡迎轉載,轉載請在文章顯眼處說明文章出處并給出連接。 https://blog.csdn.net/To_be_Designer/article/details/48685475

  這一節我們使用Baidu的定位服務,我們同樣要向上一篇博客一樣下載Baidu定位的SDK。因為在《Android 位置服務——BaiduMap的使用 》這篇博客中我們已經講過下載步驟,這里我們不在重復講解下載的過程,不明白的可以直接去上一篇博客中學習。
  這一節的講解是以上一節中百度地圖為基礎的,使用的是上一節的項目工程。建議大家先看一下《Android 位置服務——BaiduMap的使用 》。

  其實這里的步驟和Baidu定位中提供的文檔是差不多的,此處整理的目的只為加深樓主的印象。

Baidu定位環境配置

1. 首先將jar包拷貝到libs文件夾下。
2. 通過Android Studio “File——>Project Structure——>Dependencies”中的File Dependency將我們剛才拷貝的.jar包導入。
3. 其次在main文件夾下創建一個“jniLibs”的文件夾,將包含.so文件的文件夾復制到此處。
4. 配置AndroidManifext.xml.

  • 在application標簽中聲明service組件,每個app擁有自己單獨的定位service
<service android:name="com.baidu.location.f"android:enabled="true"android:process=":remote"></service>
  • 設置AcessKey
<meta-data android:name="com.baidu.lbsapi.API_KEY"android:value="key" />
  • 聲明權限
<!-- 這個權限用于進行網絡定位--> <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>

Baidu定位使用

  再次聲明下這里使用的項目是基于《Android 位置服務——BaiduMap的使用 》這篇博客的,在此基礎上進行定位功能呢的添加。

1.初始化LocationClient類。

public LocationClient mLocationClient = null; public BDLocationListener myListener = new MyLocationListener();public void onCreate() {mLocationClient = new LocationClient(getApplicationContext()); //聲明LocationClient類mLocationClient.registerLocationListener( myListener ); //注冊監聽函數//以上兩句卸載setContentView(R.layout.activity_main)之前。 }

2. 配置定位SDK參數。

private void initLocation(){LocationClientOption option = new LocationClientOption();option.setLocationMode(LocationMode.Hight_Accuracy );//可選,默認高精度,設置定位模式,高精度,低功耗,僅設備option.setCoorType("bd09ll");//可選,默認gcj02,設置返回的定位結果坐標系int span=1000;option.setScanSpan(span);//可選,默認0,即僅定位一次,設置發起定位請求的間隔需要大于等于1000ms才是有效的option.setIsNeedAddress(true);//可選,設置是否需要地址信息,默認不需要option.setOpenGps(true);//可選,默認false,設置是否使用gpsoption.setLocationNotify(true);//可選,默認false,設置是否當gps有效時按照1S1次頻率輸出GPS結果option.setIsNeedLocationDescribe(true);//可選,默認false,設置是否需要位置語義化結果,可以在BDLocation.getLocationDescribe里得到,結果類似于“在北京天安門附近”option.setIsNeedLocationPoiList(true);//可選,默認false,設置是否需要POI結果,可以在BDLocation.getPoiList里得到 option.setIgnoreKillProcess(false);//可選,默認false,定位SDK內部是一個SERVICE,并放到了獨立進程,設置是否在stop的時候殺死這個進程,默認殺死option.SetIgnoreCacheException(false);//可選,默認false,設置是否收集CRASH信息,默認收集 option.setEnableSimulateGps(false);//可選,默認false,設置是否需要過濾gps仿真結果,默認需要mLocationClient.setLocOption(option);}

高精度定位模式:這種定位模式下,會同時使用網絡定位和GPS定位,優先返回最高精度的定位結果;

低功耗定位模式:這種定位模式下,不會使用GPS,只會使用網絡定位(Wi-Fi和基站定位);

僅用設備定位模式:這種定位模式下,不需要連接網絡,只使用GPS進行定位,這種模式下不支持室內環境的定位。

3. 實現BDLocationListener接口,在艦艇中對定位進行處理。這里我們做的處理是在定位處方放置定位符號,并添加連線。

@Overridepublic void onReceiveLocation(BDLocation location) {if (location.getLocType() == BDLocation.TypeServerError) {} else if (location.getLocType() == BDLocation.TypeNetWorkException) {} else if (location.getLocType() == BDLocation.TypeCriteriaException) {} else {mTextViewLocation.setText(location.getAddress().address);currentLongtitude = location.getLongitude();currentLatitude = location.getLatitude();mBaiduMap.addOverlay(new MarkerOptions().position(new LatLng(currentLatitude, currentLongtitude)).icon(BitmapDescriptorFactory.fromResource(R.mipmap.icon_marka)));LatLng p = new LatLng(currentLatitude, currentLongtitude);points.add(p);}}}

結果如下:

全部代碼如下:

public class MainActivity extends Activity implements View.OnClickListener {private Button mButtonStart;//開始定位按鈕private Button mButtonOne;//獲取地址一按鈕private Button mButtonTwo;//獲取地址二按鈕private Button mButtonLine;//劃線按鈕private TextView mTextViewLocation;//顯示當前的地址MapView mMapView = null;//地圖視圖BaiduMap mBaiduMap;//地圖對象//連線點的集合private List<LatLng> points = new ArrayList<LatLng>();//通過地址獲得經緯度GeoCoder mSearch = null; // 搜索模塊,也可去掉地圖模塊獨立使用public LocationClient mLocationClient = null;public BDLocationListener myListener = new MyLocationListener();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//定位mLocationClient = new LocationClient(getApplicationContext()); //聲明LocationClient類mLocationClient.registerLocationListener(myListener); //注冊監聽函數//使用BaiduMap SDK//在使用SDK各組件之前初始化context信息,傳入ApplicationContextSDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);//獲取地圖控件引用mMapView = (MapView) findViewById(R.id.bmapView);//獲得地圖視圖的對象mBaiduMap = mMapView.getMap();//獲得地圖對象//初始化搜索模塊,注冊事件監聽mSearch = GeoCoder.newInstance();//獲得搜索的對象mSearch.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {@Overridepublic void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {if (geoCodeResult == null || geoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {Toast.makeText(MainActivity.this, "抱歉,未能找到結果", Toast.LENGTH_LONG).show();return;}mBaiduMap.addOverlay(new MarkerOptions().position(geoCodeResult.getLocation()).icon(BitmapDescriptorFactory.fromResource(R.mipmap.icon_marka)));mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(geoCodeResult.getLocation()));LatLng p = new LatLng(geoCodeResult.getLocation().latitude, geoCodeResult.getLocation().longitude);//添加點points.add(p);String strInfo = String.format("緯度:%f 經度:%f",geoCodeResult.getLocation().latitude, geoCodeResult.getLocation().longitude);Log.d("data", strInfo);Toast.makeText(MainActivity.this, strInfo, Toast.LENGTH_LONG).show();}@Overridepublic void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {}});//獲取布局中的各個控件對象mButtonStart = (Button) findViewById(R.id.button_start);mButtonOne = (Button) findViewById(R.id.button_one);mButtonTwo = (Button) findViewById(R.id.button_two);mButtonLine = (Button) findViewById(R.id.button_three);mTextViewLocation = (TextView) findViewById(R.id.textview_location);//設置點擊事件mButtonStart.setOnClickListener(this);mButtonOne.setOnClickListener(this);mButtonTwo.setOnClickListener(this);mButtonLine.setOnClickListener(this);PushManager.startWork(getApplicationContext(), PushConstants.LOGIN_TYPE_API_KEY, "5CjXwt6IZgRSfYxwA8dtOuG5");}/*Activity關閉時將地圖關閉*/@Overrideprotected void onDestroy() {super.onDestroy();//在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命周期管理mMapView.onDestroy();}/*ActivityonResume時,將地圖onResume。*/@Overrideprotected void onResume() {super.onResume();//在activity執行onResume時執行mMapView. onResume (),實現地圖生命周期管理mMapView.onResume();}/*ActivityonPause時,將地圖onPause。*/@Overrideprotected void onPause() {super.onPause();//在activity執行onPause時執行mMapView. onPause (),實現地圖生命周期管理mMapView.onPause();}/*初始化定位*/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(true);//可選,默認false,設置是否使用gpsoption.setLocationNotify(true);//可選,默認false,設置是否當gps有效時按照1S1次頻率輸出GPS結果option.setIsNeedLocationDescribe(true);//可選,默認false,設置是否需要位置語義化結果,可以在BDLocation.getLocationDescribe里得到,結果類似于“在北京天安門附近”option.setIsNeedLocationPoiList(true);//可選,默認false,設置是否需要POI結果,可以在BDLocation.getPoiList里得到option.setIgnoreKillProcess(false);//可選,默認false,定位SDK內部是一個SERVICE,并放到了獨立進程,設置是否在stop的時候殺死這個進程,默認殺死option.SetIgnoreCacheException(false);//可選,默認false,設置是否收集CRASH信息,默認收集option.setEnableSimulateGps(false);//可選,默認false,設置是否需要過濾gps仿真結果,默認需要mLocationClient.setLocOption(option);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button_start:initLocation();mLocationClient.start();//開始定位break;case R.id.button_one://獲得天安門的地址mSearch.geocode(new GeoCodeOption().city("北京市").address("海淀區中關村海龍大廈"));break;case R.id.button_two://獲得中關村的地址mSearch.geocode(new GeoCodeOption().city("北京市").address("西城區西便門"));break;case R.id.button_three://獲得當地的地址// 添加折線OverlayOptions ooPolyline = new PolylineOptions().width(10).color(0xAAFF0000).points(points);mBaiduMap.addOverlay(ooPolyline);break;}}//獲得當前的經緯度private double currentLongtitude;private double currentLatitude;class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {if (location.getLocType() == BDLocation.TypeServerError) {} else if (location.getLocType() == BDLocation.TypeNetWorkException) {} else if (location.getLocType() == BDLocation.TypeCriteriaException) {} else {mTextViewLocation.setText(location.getAddress().address);currentLongtitude = location.getLongitude();currentLatitude = location.getLatitude();mBaiduMap.addOverlay(new MarkerOptions().position(new LatLng(currentLatitude, currentLongtitude)).icon(BitmapDescriptorFactory.fromResource(R.mipmap.icon_marka)));LatLng p = new LatLng(currentLatitude, currentLongtitude);points.add(p);}}} } posted on 2018-09-21 16:54 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/lonelyxmas/p/9687386.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Android 位置服务——BaiduLocation的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。