Android GPS 取經緯度

來源:互聯網
上載者:User

標籤:

1 // 擷取位置管理服務2 private LocationManager locationManager;
3 String mProviderName = "";
1 private void onCreate(){2       locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);              3 }

3.在onStart()

 1 @Override 2     public void onStart() { 3         super.onStart(); 4         if (getIntent() == null || getIntent().getStringExtra("city") == null 5                 || "".equals(getIntent().getStringExtra("city"))) { 6             if (openGPSSettings()) { 7                 Location lastKnownLocation = null; 8                 lastKnownLocation = locationManager 9                         .getLastKnownLocation(LocationManager.GPS_PROVIDER);10                 mProviderName = LocationManager.GPS_PROVIDER;11                 if (lastKnownLocation == null) {12                     lastKnownLocation = locationManager13                             .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);14                     mProviderName = LocationManager.NETWORK_PROVIDER;15                 }16                 if (mProviderName != null && !"".equals(mProviderName)) {17                     locationManager.requestLocationUpdates(mProviderName, 1000,18                             1, locationListener);19                 }20             }21         }22     }

判斷是否開啟GPS:

 1 /** GPS模組是否存在或者是開啟 **/ 2     private boolean openGPSSettings() { 3         LocationManager alm = (LocationManager) this 4                 .getSystemService(Context.LOCATION_SERVICE); 5         if (alm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) { 6             Toast.makeText(this, "GPS模組正常", Toast.LENGTH_SHORT).show(); 7             return true; 8         } 9 10         Toast.makeText(this, "請開啟GPS!", Toast.LENGTH_SHORT).show();11         Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);12         startActivityForResult(intent, 0); // 此為設定完成後返回到擷取介面13         return false;14     }

在onPause、onResume中處理locationManager

 1 /** 2      * 這裡一定要對LocationManager進行重新設定監聽 mgr擷取provider的過程不是一次就能成功的 3      * mgr.getLastKnownLocation很可能返回null 如果只在initProvider()中註冊一次監聽則基本很難成功 4      */ 5     @Override 6     public void onResume() { 7         super.onResume(); 8         if (locationManager != null && !Utils.isEmpty(mProviderName)) { 9             locationManager.requestLocationUpdates(mProviderName, 1000, 1,10                     locationListener);11         }12     }13 14     @Override15     public void onPause() {16         super.onPause();17         // 取消註冊監聽18         if (locationManager != null) {19             locationManager.removeUpdates(locationListener);20         }21     }

監聽位置變化:

 1 private LocationListener locationListener = new LocationListener() { 2  3         /** 4          * 位置資訊變化時觸發 5          */ 6         public void onLocationChanged(Location location) { 7  8             updateToNewLocation(location); 9         }10 11         /**12          * GPS狀態變化時觸發13          */14         public void onStatusChanged(String provider, int status, Bundle extras) {15             switch (status) {16             // GPS狀態為可見時17             case LocationProvider.AVAILABLE:18                 // 當前GPS狀態為可見狀態19                 break;20             // GPS狀態為服務區外時21             case LocationProvider.OUT_OF_SERVICE:22                 // 當前GPS狀態為服務區外狀態23                 break;24             // GPS狀態為暫停服務時25             case LocationProvider.TEMPORARILY_UNAVAILABLE:26                 // 當前GPS狀態為暫停服務狀態27                 break;28             }29         }30 31         /**32          * GPS開啟時觸發33          */34         public void onProviderEnabled(String provider) {35             Location location = locationManager.getLastKnownLocation(provider);36             updateToNewLocation(location);37         }38 39         /**40          * GPS禁用時觸發41          */42         public void onProviderDisabled(String provider) {43             updateToNewLocation(null);44         }45     };

/** 服務管理對象的監聽器 */
// 綁定監聽,有4個參數
// 參數1,裝置:有GPS_PROVIDER和NETWORK_PROVIDER兩種
// 參數2,位置資訊更新周期,單位毫秒
// 參數3,位置變化最小距離:當位置距離變化超過此值時,將更新位置資訊
// 參數4,監聽
// 備忘:參數2和3,如果參數3不為0,則以參數3為準;參數3為0,則通過時間來定時更新;兩者為0,則隨時重新整理

// 1秒更新一次,或最小位移變化超過1米更新一次;
// 注意:此處更新準確度非常低,推薦在service裡面啟動一個Thread,在run中sleep(10000);然後執行handler.sendMessage(),更新位置
// 設定監聽器,自動更新的最小時間為間隔N秒(1秒為1*1000,這樣寫主要為了方便)或最小位移變化超過N米

處理經緯度資訊,可以請求baidu擷取詳細地址資訊。

 1 public void updateToNewLocation(final Location location) { 2         if (location == null) { 3             Toast.makeText(getApplicationContext(), "GPS定位失敗", 4                     Toast.LENGTH_SHORT).show(); 5             return; 6         } 7  8         Log.i("", "經度:" + location.getLongitude()); 9         Log.i("", "緯度:" + location.getLatitude());38  }

開始啟動監聽位置變化時,可設定:

 1         String serviceName = Context.LOCATION_SERVICE; 2         locationManager = (LocationManager) this.getSystemService(serviceName); 3         // 尋找到服務資訊 4         Criteria criteria = new Criteria(); 5         // 設定定位精確度 Criteria.ACCURACY_COARSE比較粗略,Criteria.ACCURACY_FINE則比較精細 6         criteria.setAccuracy(Criteria.ACCURACY_FINE); 7         // 設定是否要求速度 8         criteria.setSpeedRequired(false); 9         // 設定是否需要海拔資訊10         criteria.setAltitudeRequired(false);11         // 設定是否需要方位資訊12         criteria.setBearingRequired(false);13         // 設定是否允許電訊廠商收費14         criteria.setCostAllowed(true);15         // 設定對電源的需求16         criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗17 18         // 為擷取地理位置資訊時設定查詢條件19         String provider = locationManager.getBestProvider(criteria, true); // 擷取GPS資訊

 

//如果不設定查詢要求,getLastKnownLocation方法傳人的參數為LocationManager.GPS_PROVIDERLocation location = locationManager.getLastKnownLocation(provider);// 通過GPS擷取位置updateToNewLocation(location);

 

Android GPS 取經緯度

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.