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

來源:互聯網
上載者:User

特別聲明:以下所有操作都別忘記了加上許可權:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
 
 <uses-permission android:name="android.permission.INTERNET" /> 
 
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
 
sp; 
LocationManager




 

通過LocationManager可以實現裝置的定位、跟蹤和趨近提示。它不需要你直接來執行個體化,我們可以通過Context.getSystemService(Context.LOCATION_SERVICE). 來獲得LocationManager執行個體。

常用屬性和方法

  

屬性和方法 描述
GPS_PROVIDER 靜態字串常量,表明LocationProvider是GPS
NETWORK_PROVIDER 靜態字串常量,表明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


locationManager=(LocationManager)LocationManagerDemoActivity.this.getSystemService(Context.LOCATION_SERVICE); 
 
               
 
              //擷取所有的LocationProvider  
 
              List<String> allproviders=locationManager.getAllProviders(); 
 
              for (String string : allproviders) { 
 
                  System.out.println(string); 
 
              } 



 

Location類

 

 

它用於描述當前裝置的地理位置資訊,包括了經緯度、方向、高度和速度等。可以通過LocationManager.getLastKnownLocation(String provider)方法可以獲得Location執行個體

其常見方法和屬性:


 

方法 描述
public float getAccuracy () 獲得精確度
public double getAltitude () 獲得高度
public float getBearing () 獲得方向
public double getLatitude () 擷取經度
public double getLongitude () 獲得緯度
public float getSpeed () 獲得速度

 


 執行個體:得到你自己的位置

 

// 擷取自己的位置  
 
   btnGetPosition.setOnClickListener(new View.OnClickListener() { 
 
       @Override 
 
       public void onClick(View v) { 
 
          System.out.println("擷取當前位置"); 
 
          locationManager = (LocationManager) LocationManagerDemoActivity.this 
 
                 .getSystemService(Context.LOCATION_SERVICE); 
 
 
 
    
 
 
 
          Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
 
          System.out.println("你當前的位置:");  www.2cto.com
 
          StringBuilder sb=new StringBuilder("你當前的位置(經緯度):"); 
 
          sb.append("("); 
 
          sb.append(location.getLatitude()); 
 
          sb.append(","); 
 
          sb.append(location.getLongitude()); 
 
          sb.append(")"); 
 
          System.out.println(location.getLatitude()); 
 
          System.out.println(location.getLongitude()); 
 
          txtPostion.setText(sb); 
 
       } 
 
   }); 
    // 擷取自己的位置

       btnGetPosition.setOnClickListener(new View.OnClickListener() {

           @Override

           public void onClick(View v) {

              System.out.println("擷取當前位置");

              locationManager = (LocationManager) LocationManagerDemoActivity.this

                     .getSystemService(Context.LOCATION_SERVICE);

 

      

 

              Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

              System.out.println("你當前的位置:");

              StringBuilder sb=new StringBuilder("你當前的位置(經緯度):");

              sb.append("(");

              sb.append(location.getLatitude());

              sb.append(",");

              sb.append(location.getLongitude());

              sb.append(")");

              System.out.println(location.getLatitude());

              System.out.println(location.getLongitude());

              txtPostion.setText(sb);

           }

       });

 
 

執行個體:追蹤位置:

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

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

   


locationManager.requestLocationUpdates( 
 
                  LocationManager.GPS_PROVIDER, 500, 500, new listener()); 
   locationManager.requestLocationUpdates(

                     LocationManager.GPS_PROVIDER, 500, 500, new listener());

 
執行個體:擷取最好的LocationProivider


LocationManager.getBasetProvider(Criteria criteria,boolean is) 
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() 獲得精度

 
 



 

// 擷取最佳的Provider  
 
   btnBestProvider.setOnClickListener(new View.OnClickListener() { 
 
       @Override 
 
       public void onClick(View v) { 
 
          String bestProviders = ""; 
 
          locationManager = (LocationManager) LocationManagerDemoActivity.this 
 
                 .getSystemService(Context.LOCATION_SERVICE); 
 
          // 建立一個Criteria  
 
          Criteria criteria = new Criteria(); 
 
          // 設定精確度  
 
          criteria.setAccuracy(Criteria.ACCURACY_COARSE); 
 
          criteria.setPowerRequirement(Criteria.POWER_LOW); 
 
          criteria.setAltitudeRequired(false); 
 
          criteria.setBearingRequired(false); 
 
          criteria.setSpeedRequired(false); 
 
          criteria.setCostAllowed(false); 
 
          // 獲得合格provider  
 
          bestProviders = locationManager 
 
                 .getBestProvider(criteria, false); 
 
          txtCrerita.setText("最佳的provider:"+bestProviders); 
 
           
 
       } 
 
   }); 
    // 擷取最佳的Provider

       btnBestProvider.setOnClickListener(new View.OnClickListener() {

           @Override

           public void onClick(View v) {

              String bestProviders = "";

              locationManager = (LocationManager) LocationManagerDemoActivity.this

                     .getSystemService(Context.LOCATION_SERVICE);

              // 建立一個Criteria

              Criteria criteria = new Criteria();

              // 設定精確度

              criteria.setAccuracy(Criteria.ACCURACY_COARSE);

              criteria.setPowerRequirement(Criteria.POWER_LOW);

              criteria.setAltitudeRequired(false);

              criteria.setBearingRequired(false);

              criteria.setSpeedRequired(false);

              criteria.setCostAllowed(false);

              // 獲得合格provider

              bestProviders = locationManager

                     .getBestProvider(criteria, false);

              txtCrerita.setText("最佳的provider:"+bestProviders);

             

           }

       }); www.2cto.com

 
總結(再看GPS):

從以上知識我們可以知道,要想使用Android平台下的GPS服務我們就得用LocationManager這個系統服務,我們可以通過Context.getSystemService(Context.LOCATION_SERVIER)來得到這個LocationManager對象執行個體,有了這麼一個服務後,我們可以通過LocationProvider來描述位置提供者,為了某種需要我們又用到了一個Criteria類來設定滿足我們自己的最佳要求,那麼這一切都搞定的時候,擷取我們自己所在的位置我們就用到了Location類,這個類用來擷取我們自己的位置,例如:經緯度。

 

摘自 jiahui524專欄

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.