Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android學習指南之二十六:Android GPS服務的應用

Android學習指南之二十六:Android GPS服務的應用

編輯:關於android開發

       LBS(Location Based Services),又稱位置服務,首先它能很容易的獲取移動用戶當前的實際地理位置,如經緯度、海拔等坐標數據,其次它還能夠為用戶提供與當前位置相關的增值服務信息,例如附近的餐館、醫院、學校等。而對於獲取用戶的當前位置,我們可以通過Android系統的GPS定位服務來實現。

       Android提供了基於網絡的定位服務和基於衛星的定位服務兩種。在設置->位置和安全設置裡面的前三項就是與之相關的設置項,最後一個增強型GPS是為了輔助快速找衛星的。

Android GPS設置

       那麼我們現在就寫一個簡單的程序來實現獲取當前位置的功能。

       1、新建項目Lesson26_GPSLocation。

       2、MainActivity.java的代碼如下:

Java代碼
  1. package basic.android.lesson26;   
  2.   
  3. import android.app.Activity;   
  4. import android.content.Context;   
  5. import android.location.Criteria;   
  6. import android.location.Location;   
  7. import android.location.LocationListener;   
  8. import android.location.LocationManager;   
  9. import android.os.Bundle;   
  10. import android.util.Log;   
  11. import android.view.View;   
  12. import android.widget.Button;   
  13. import android.widget.TextView;   
  14.   
  15. public class MainActivity extends Activity {   
  16.   
  17.     TextView tv1;   
  18.     Location location;   
  19.   
  20.     @Override  
  21.     public void onCreate(Bundle savedInstanceState) {   
  22.         super.onCreate(savedInstanceState);   
  23.         setContentView(R.layout.main);   
  24.   
  25.         // 定義UI組件   
  26.         Button b1 = (Button) findViewById(R.id.button1);   
  27.         tv1 = (TextView) findViewById(R.id.textView1);   
  28.   
  29.         // 獲取LocationManager對象   
  30.         LocationManager lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);   
  31.   
  32.         // 定義Criteria對象   
  33.         Criteria criteria = new Criteria();   
  34.         // 設置定位精確度 Criteria.ACCURACY_COARSE 比較粗略, Criteria.ACCURACY_FINE則比較精細   
  35.         criteria.setAccuracy(Criteria.ACCURACY_FINE);   
  36.         // 設置是否需要海拔信息 Altitude   
  37.         criteria.setAltitudeRequired(true);   
  38.         // 設置是否需要方位信息 Bearing   
  39.         criteria.setBearingRequired(true);   
  40.         // 設置是否允許運營商收費   
  41.         criteria.setCostAllowed(true);   
  42.         // 設置對電源的需求   
  43.         criteria.setPowerRequirement(Criteria.POWER_LOW);   
  44.   
  45.         // 獲取GPS信息提供者   
  46.         String bestProvider = lm.getBestProvider(criteria, true);   
  47.         Log.i("yao", "bestProvider = " + bestProvider);   
  48.   
  49.         // 獲取定位信息   
  50.         location = lm.getLastKnownLocation(bestProvider);   
  51.   
  52.         // 給按鈕綁定點擊監聽器   
  53.         b1.setOnClickListener(new View.OnClickListener() {   
  54.             @Override  
  55.             public void onClick(View v) {   
  56.                 updateLocation(location);   
  57.             }   
  58.         });   
  59.   
  60.         // 位置監聽器   
  61.         LocationListener locationListener = new LocationListener() {   
  62.   
  63.             // 當位置改變時觸發   
  64.             @Override  
  65.             public void onLocationChanged(Location location) {   
  66.                 Log.i("yao", location.toString());   
  67.                 updateLocation(location);   
  68.             }   
  69.   
  70.             // Provider失效時觸發   
  71.             @Override  
  72.             public void onProviderDisabled(String arg0) {   
  73.                 Log.i("yao", arg0);   
  74.   
  75.             }   
  76.   
  77.             // Provider可用時觸發   
  78.             @Override  
  79.             public void onProviderEnabled(String arg0) {   
  80.                 Log.i("yao", arg0);   
  81.             }   
  82.   
  83.             // Provider狀態改變時觸發   
  84.             @Override  
  85.             public void onStatusChanged(String arg0, int arg1, Bundle arg2) {   
  86.                 Log.i("yao", "onStatusChanged");   
  87.             }   
  88.         };   
  89.   
  90.         // 500毫秒更新一次,忽略位置變化   
  91.         lm.requestLocationUpdates(bestProvider, 500, 0, locationListener);   
  92.   
  93.     }   
  94.   
  95.     // 更新位置信息   
  96.     private void updateLocation(Location location) {   
  97.         if (location != null) {   
  98.             tv1.setText("定位對象信息如下:" + location.toString() + "\n\t其中經度:" + location.getLongitude() + "\n\t其中緯度:"  
  99.                     + location.getLatitude());   
  100.         } else {   
  101.             Log.i("yao", "沒有獲取到定位對象Location");   
  102.         }   
  103.     }   
  104. }  

       3、main.xml我就不貼代碼了,就一個按鈕和一個文本框,等一下看看截圖就會明白。

       4、要在AndroidManifest.xml中加入權限才行:

XML/HTML代碼
  1. <!-- 粗略定位授權 -->  
  2. <USES android:name="android.permission.ACCESS_COARSE_LOCATION" -permission></USES>  
  3. <!-- 精細定位授權 -->  
  4. <USES android:name="android.permission.ACCESS_FINE_LOCATION" -permission></USES>  
  5. <!-- 模擬定位授權 -->  
  6. <USES android:name="android.permission.ACCESS_MOCK_LOCATION" -permission></USES>  
  7. <!-- 網絡訪問授權 -->  
  8. <USES android:name="android.permission.INTERNET" -permission></USES>  

       5、在真機上編譯運行程序,查看結果:

使用GPS獲取當前地理位置

       這裡要說明一下,我在模擬器上提交模擬器數據沒成功,在真機上測試也不是很順利,一和硬件有關就總會出一些莫名其妙的錯誤。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved