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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android GPS定位

發布時間:2023/12/9 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android GPS定位 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定位方式

地理坐標的獲取,有四種方式GPS定位,WIFI定位,基站定位,AGPS定位。

(1)純硬件定位
需要GPS硬件支持,直接和衛星交互來獲取當前經緯度

(2)純軟件定位
一種是通過WIFI連接來確認熱點的位置 然后給出一個比較大概的位置(獲得WIFI的AP地址之后,是需要連接WIFI數據庫來獲得真正的地址的 )
一種是通過移動基站的MSC(Mobile Switching Center移動通信系統)交互來確認你注冊的是哪個基站 以及基站的位置(可能和多個基站交互來獲取較精確的位置信息)

(3)軟硬件混合定位方式
AGPS 先通過軟件來獲取大概位置 然后得到此區域的衛星序列 和衛星通信

常用的是GPS和WIFI(即NetWork)。

如何獲取當前地理坐標位置

(1)權限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission..ACCESS_FINE_LOCATION" />

Android 6.0以上,需要在運行時查看相應權限是否申請成功。

(2)獲取LocationManager

LocationManager mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);

(3)提供定位需求(Optional)

該步驟可選。可通過指定Provider Name,直接跳過步驟(3)(4)(5)

Criteria mCriteria = new Criteria(); mCriteria.setAccuracy(Criteria.ACCURACY_FINE);//精確度要求 mCriteria.setSpeedRequired(true);//是否包含移動速度 mCriteria.setAltitudeRequired(true);//是否包括高度 mCriteria.setBearingRequired(true);//是否包括方位 mCriteria.setCostAllowed(true);//是否允許付費 mCriteria.setPowerRequirement(Criteria.POWER_LOW);//對耗電量的要求

精確度包括:
Criteria.ACCURACY_FINE,精確位置
Criteria.ACCURACY_HIGH, 誤差小于100米
Criteria.ACCURACY_MEDIUM,誤差在100至500米間
Criteria.ACCURACY_LOW,誤差小于500米
Criteria.ACCURACY_COARSE,粗略位置

對耗電量要求包括:
Criteria.POWER_LOW,低耗電量
Criteria.POWER_HIGH,高耗電量

(4)獲取適宜的Location Provider Name(Optional)

該步驟為可選。

String mProviderName = mLocationManager.getBestProvider(mCriteria, true);

其中getBestProvider第二個參數,為Boolean類型,enabledOnly,是指是否只查找可用的Provider.

(5)根據Location Provider Name查看Location Provider是否可用(Optional)

若在之前調用了getBestProvider方法,并將該方法的第二參數設置為true,則該步驟可省略。

mLocationManager.isProviderEnabled(mProviderName)

方法返回Boolean變量,可根據Provider是否可用選擇備用方案。

(6)監聽Location

mLocationListener = new LocationListener() {@Overridepublic void onLocationChanged(Location location) {mlocation=location;}@Overridepublic void onStatusChanged(String s, int i, Bundle bundle) {}@Overridepublic void onProviderEnabled(String s) {}@Overridepublic void onProviderDisabled(String s) {} };

其中onLocationChanged方法最為重要。可通過該方法獲取當前坐標信息。
onStatusChanged方法表示,Provider狀態的變化,例如WIFI的連接或斷開。
onProviderEnabled方法,onProviderDisabled方法則監聽Provider是否可用,比如GPS打開或關閉。

(7)根據Location Provider Name和監聽Listener獲取當前坐標

mLocationManager.requestLocationUpdates(mProviderName, mMinTime, mMinDistance, mLocationListener);

該步驟最為關鍵。通過調用requestLocationUpdates,建立Provider和Listener間的聯系。

參數一,mProviderName,可以有三個選項。
(a)LocationManager.NETWORK_PROVIDER,使用WIFI來定位
(b)LocationManager.GPS_PROVIDER,使用GPS來定位
(c)LocationManager.PASSIVE_PROVIDER,被動定位方式。當其他應用使用定位更新了定位信息,系統會保存下來,該應用接收到消息后直接讀取就可以了。比如如果系統中已經安裝了百度地圖,高德地圖(室內可以實現精確定位),你只要使用它們定位過后,再使用這種方法在你的程序肯定是可以拿到比較精確的定位信息。但該方式,不常用。僅用前兩者就好。

參數二,mMinTime,單位毫秒,指定更新的最小間隔。但該參數并不準確,可能長,也可能短。因此,不要太迷信該參數。

參數三,mMinDistance,單位米,指定更新坐標的最小差距。

若成功獲取坐標,將在mLocationListener的onLocationChanged方法中獲得。

(8)取消監聽
當需要停止坐標更新時,需要取消監聽。

mLocationManager.removeUpdates(mLocationListener);

GPS的優缺點

GPS的有點是定位準確,但也是唯一有點。
缺點不多,但致命:定位慢,耗電量大。定位慢,也是onLocationChanged常常無法拿到Location(NULL)的原因。

建議使用LocationManager.NETWORK_PROVIDER來獲取定位信息。其速度快,準確度與GPS相差無幾。

另外還需要指出的是,獲取到Location的坐標后,尚不能直接轉換為實際地址。對于不同的地圖,其坐標系也不同,因此進行坐標系的轉換是必要的。

以百度地圖為例,支持三種地圖。

(1)WGS84:為一種大地坐標系,也是目前廣泛使用的GPS全球衛星定位系統使用的坐標系;
(2) GCJ02:是由中國國家測繪局制訂的地理信息系統的坐標系統,是由WGS84坐標系經加密后的坐標系;
(3)BD09:百度坐標系,在GCJ02坐標系基礎上再次加密。其中BD09ll表示百度經緯度坐標,BD09mc表示百度墨卡托米制坐標。
百度地圖在國內(包括港澳臺)使用的是BD09坐標;在海外地區,統一使用WGS84坐標。開發者在使用百度地圖相關服務時,請注意選擇。

因此,從GPS獲取坐標后,在國內需要轉換為GCJ02坐標。相應轉換方法,此處不再描述,感興趣的同學可以自行百度或谷歌。

總結

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

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