Android開發進階(三)--初探Android平臺上的定位服務(GPS)


初探Android平臺上的定位服務(GPS)
html

 

特別聲明:如下全部操做都別忘記了加上權限: java

[html]   view plain copy print ?
  1. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  2.   
  3.  <uses-permission android:name="android.permission.INTERNET" />  
  4.   
  5.  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
  6.   
  7. sp;  

LocationManager android

經過LocationManager能夠實現設備的定位、跟蹤和趨近提示。它不須要你直接來實例化,咱們能夠經過Context.getSystemService(Context.LOCATION_SERVICE). 來得到LocationManager實例。 git

經常使用屬性和方法 網絡

屬性和方法 app

描述 ide

GPS_PROVIDER ui

靜態字符串常量,代表LocationProvider是GPS this

NETWORK_PROVIDER spa

靜態字符串常量,代表LocationProvider是網絡

addGpsStatusListener(GpsStatus.Listener listener)

添加一個GPS狀態監聽器

addProximityAlert(double latitude, double longitude, float radius, long expiration, PendingIntent intent)

添加一個趨近警告

getAllProviders()

得到全部的LocationProvider列表

getBestProvider(Criteria criteria, boolean enabledOnly)

根據Criteria返回最適合的LocationProvider

getLastKnownLocation(String provider)

根據Provider得到位置信息

getProvider(String name)

得到指定名稱的LocationProvider

getProvider(boolean enableOnly)

得到可利用的LocationProvider列表

removeProximityAlert(PendingIntent intent)

刪除趨近警告

requestLocationUpdates(String provider, long minTime, float minDistance, PendingIntent intent)

經過給定的Provider名稱,週期性地通知當前Activity

requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)

經過給定的Provider名稱,並將其綁定指定的LocationListener監聽器

 

 

 

LocationProvider

LocationProvider用來描述位置提供者,設置位置提供者的一些屬性。能夠經過Criteria類來爲LocationProvider設置條件,得到合適的LocationProvider。

屬性或者方法名稱

描述

AVAILABLE

靜態整型常量,標示是否可利用

OUT_OF_SERVICE

靜態整型常量,不在服務區

TEMPORAILY_UNAVAILABLE

靜態整型常量,臨時不可利用

getAccuarcy()

得到精度

getName()

得到名稱

getPowerRequirement()

得到電源需求

hasMonetaryCost()

花錢的仍是免費的

requiresCell()

是否須要訪問基站網絡

requiresNetWork()

是否須要Intent網絡數據

requiresSatelite()

是否須要訪問衛星

supportsAltitude()

是否可以提供高度信息

supportsBearing()

是否可以提供方向信息

supportsSpeed()

是否可以提供速度信息

實例:獲取設備上的全部的LocationProviders

[java]   view plain copy print ?
  1. locationManager=(LocationManager)LocationManagerDemoActivity.this.getSystemService(Context.LOCATION_SERVICE);  
  2.   
  3.                 
  4.   
  5.               //獲取全部的LocationProvider  
  6.   
  7.               List<String> allproviders=locationManager.getAllProviders();  
  8.   
  9.               for (String string : allproviders) {  
  10.   
  11.                   System.out.println(string);  
  12.   
  13.               }  

 

Location類

它用於描述當前設備的地理位置信息,包括了經緯度、方向、高度和速度等。能夠經過LocationManager.getLastKnownLocation(String provider)方法能夠得到Location實例

其常見方法和屬性:

方法

描述

public float getAccuracy ()

得到精確度

public double getAltitude ()

得到高度

public float getBearing ()

得到方向

public double getLatitude ()

獲取經度

public double getLongitude ()

得到緯度

public float getSpeed ()

得到速度

實例:獲得你本身的位置

[java]   view plain copy print ?
  1. // 獲取本身的位置  
  2.   
  3.    btnGetPosition.setOnClickListener(new View.OnClickListener() {  
  4.   
  5.        @Override  
  6.   
  7.        public void onClick(View v) {  
  8.   
  9.           System.out.println("獲取當前位置");  
  10.   
  11.           locationManager = (LocationManager) LocationManagerDemoActivity.this  
  12.   
  13.                  .getSystemService(Context.LOCATION_SERVICE);  
  14.   
  15.   
  16.   
  17.      
  18.   
  19.   
  20.   
  21.           Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);  
  22.   
  23.           System.out.println("你當前的位置:");  
  24.   
  25.           StringBuilder sb=new StringBuilder("你當前的位置(經緯度):");  
  26.   
  27.           sb.append("(");  
  28.   
  29.           sb.append(location.getLatitude());  
  30.   
  31.           sb.append(",");  
  32.   
  33.           sb.append(location.getLongitude());  
  34.   
  35.           sb.append(")");  
  36.   
  37.           System.out.println(location.getLatitude());  
  38.   
  39.           System.out.println(location.getLongitude());  
  40.   
  41.           txtPostion.setText(sb);  
  42.   
  43.        }  
  44.   
  45.    });  

 

實例:追蹤位置:

requestLocationUpdates(String provider,long minTime,float minDistance,LocationListener listener)

關於參數minTime,minDistance的說明是指當用戶位置改變多少緯度時候多長時間更新下這個用戶的位置

    

[java]   view plain copy print ?
  1. locationManager.requestLocationUpdates(  
  2.   
  3.                   LocationManager.GPS_PROVIDER, 500500new listener());  

實例:獲取最好的LocationProivider

[java]   view plain copy print ?
  1. LocationManager.getBasetProvider(Criteria criteria,boolean is)  

Criteria類

它封裝了用於得到LocationProvider的條件,能夠根據指定的Criteria條件來過濾得到LocationProvider

及經常使用屬性和方法以下:

屬性或訪求名稱

描述

ACCERACY_COARSE

粗糙精確度

ACCURACY_FINE

較高精確度

POWER_HING

用電高

POWER_LOW

用電低

isAlititudeRequried()

返回Provider是否須要高度信息

isBearingRequired()

返回Provider是否須要方位信息

isSpeedRequried()

返回Provider是否須要速度信息

isCostAllowed()

是否容許產生費用

setAccuracy(int accuracy)

設置Provider的精確度

setAltitudeRequired (boolean altitudeRequired)

設置Provider是否須要高度信息

setBearingRequired (boolean bearingRequired)

設置Provider是否須要方位信息

setCostAllowed (boolean costAllowed)

設置Provider是否產生費用

setSpeedAccuracy (int accuracy)

設置Provider是否須要速度信息

getAccuracy()

得到精度

[java]   view plain copy print ?
  1. // 獲取最佳的Provider  
  2.   
  3.    btnBestProvider.setOnClickListener(new View.OnClickListener() {  
  4.   
  5.        @Override  
  6.   
  7.        public void onClick(View v) {  
  8.   
  9.           String bestProviders = "";  
  10.   
  11.           locationManager = (LocationManager) LocationManagerDemoActivity.this  
  12.   
  13.                  .getSystemService(Context.LOCATION_SERVICE);  
  14.   
  15.           // 新建一個Criteria  
  16.   
  17.           Criteria criteria = new Criteria();  
  18.   
  19.           // 設置精確度  
  20.   
  21.           criteria.setAccuracy(Criteria.ACCURACY_COARSE);  
  22.   
  23.           criteria.setPowerRequirement(Criteria.POWER_LOW);  
  24.   
  25.           criteria.setAltitudeRequired(false);  
  26.   
  27.           criteria.setBearingRequired(false);  
  28.   
  29.           criteria.setSpeedRequired(false);  
  30.   
  31.           criteria.setCostAllowed(false);  
  32.   
  33.           // 得到符合條件的provider  
  34.   
  35.           bestProviders = locationManager  
  36.   
  37.                  .getBestProvider(criteria, false);  
  38.   
  39.           txtCrerita.setText("最佳的provider:"+bestProviders);  
  40.   
  41.             
  42.   
  43.        }  
  44.   
  45.    });  

總結(再看GPS):

從以上知識咱們能夠知道,要想使用Android平臺下的GPS服務咱們就得用LocationManager這個系統服務,咱們能夠經過Context.getSystemService(Context.LOCATION_SERVIER)來獲得這個LocationManager對象實例,有了這麼一個服務後,咱們能夠經過LocationProvider來描述位置提供者,爲了某種須要咱們又用到了一個Criteria類來設置知足咱們本身的最佳要求,那麼這一切都搞定的時候,獲取咱們本身所在的位置咱們就用到了Location類,這個類用來獲取咱們本身的位置,例如:經緯度。

相關文章
相關標籤/搜索