轉自:http://marshal.easymorse.com/archives/2528
android location provider有兩個:
- LocationManager.GPS_PROVIDER:GPS,精度比較高,但是慢而且消耗電力,而且可能因爲天氣原因或者障礙物而無法獲取衛星信息,另外設備可能沒有GPS模塊;
- LocationManager.NETWORK_PROVIDER:通過網絡獲取定位信息,精度低,耗電少,獲取信息速度較快,不依賴GPS模塊。
爲了程序的通用性,希望動態選擇location provider。對android通過Location API顯示地址信息做了個別改動,可以看到使用了gps定位,精度較高:
這裏使用到了Criteria,可根據當前設備情況自動選擇哪種location provider。見:
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);//設置爲最大精度
criteria.setAltitudeRequired(false);//不要求海拔信息
criteria.setBearingRequired(false);//不要求方位信息
criteria.setCostAllowed(true);//是否允許付費
criteria.setPowerRequirement(Criteria.POWER_LOW);//對電量的要求location = locationManager
.getLastKnownLocation(locationManager.getBestProvider(criteria, true));
原來的寫法很簡單:
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
location=locationManager.getLastKnownLocation(LocationManager.NETWOR