定位類型:
1 gps 衛星定位 1米之內 agps 5米之內 手機上面不能遮蓋物。
2 wifi 定位 ip號 網段
3 基站定位 500 -1000米
network :wifi 基站
gps :gps agps
passvie: 無源定位 (綜合所有的定位方式,得出最准確的結果)
LocationManager
要得到最好的定位方式,需要構建一組查詢條件
1 // 查詢條件 2 Criteria criteria = new Criteria(); 3 criteria.setAccuracy(Criteria.ACCURACY_FINE); // 定位的精准度 4 criteria.setAltitudeRequired(false); // 海拔信息是否關注 5 criteria.setBearingRequired(false); // 對周圍的事物是否關心 6 criteria.setCostAllowed(true); // 是否支持收費查詢 7 criteria.setPowerRequirement(Criteria.POWER_LOW); // 是否耗電 8 criteria.setSpeedRequired(false); // 對速度是否關注 9 10 // 獲取最好的定位方式 11 String provider = locationManager.getBestProvider(criteria, true); // true 代表從打開的設備中查找
獲取手機的經度緯度位置demo:
1 package com.android.hzy.mobilesafe.engine; 2 3 import android.content.Context; 4 import android.content.SharedPreferences; 5 import android.content.SharedPreferences.Editor; 6 import android.location.Criteria; 7 import android.location.Location; 8 import android.location.LocationListener; 9 import android.location.LocationManager; 10 import android.os.Bundle; 11 12 /** 13 * 該類只能有一個實例 單例 14 * 如果打開多個定位耗電 而且同時只能有一個在使用 15 * @author Administrator 16 * 17 */ 18 public class GPSInfoService { 19 20 private static GPSInfoService mInstance; 21 private LocationManager locationManager;// 定位服務 22 private MyLocationListener listener; 23 private SharedPreferences sp; 24 25 private GPSInfoService(Context context) { 26 // TODO Auto-generated constructor stub 27 locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 28 sp = context.getSharedPreferences("config", Context.MODE_PRIVATE); 29 } 30 31 public static GPSInfoService getInstance(Context context){ 32 if(mInstance == null){ 33 mInstance = new GPSInfoService(context); 34 } 35 return mInstance; 36 } 37 38 /************注冊定位監聽**************************/ 39 public void registenerLocationChangeListener(){ 40 // 得到所有的定位 41 // List<String> providers = locationManager.getAllProviders(); 42 // for (String provider : providers) { 43 // Log.i("i", provider); 44 // } 45 46 // 查詢條件 47 Criteria criteria = new Criteria(); 48 criteria.setAccuracy(Criteria.ACCURACY_FINE); // 定位的精准度 49 criteria.setAltitudeRequired(false); // 海拔信息是否關注 50 criteria.setBearingRequired(false); // 對周圍的事物是否關心 51 criteria.setCostAllowed(true); // 是否支持收費查詢 52 criteria.setPowerRequirement(Criteria.POWER_LOW); // 是否耗電 53 criteria.setSpeedRequired(false); // 對速度是否關注 54 55 // 獲取最好的定位方式 56 String provider = locationManager.getBestProvider(criteria, true); // true 代表從打開的設備中查找 57 58 // 注冊監聽 59 /** 60 * provider:定位方式 61 * minTime:定位時間 最少不能小於60000ms (定位需要時間) 62 * minDistance:最小距離位置更新 0代表不更新 按定位時間更新 63 * 64 */ 65 locationManager.requestLocationUpdates(provider, 0, 0, getListener()); 66 } 67 68 69 70 /*****通過單例來得到 定位的監聽器*****************/ 71 private MyLocationListener getListener(){ 72 if(listener == null){ 73 listener = new MyLocationListener(); 74 } 75 return listener; 76 } 77 78 /******從SharedPreferences 返回上一個獲取地理位置的值************/ 79 public String getLastLocation(){ 80 81 return sp.getString("last_location", ""); 82 } 83 84 private final class MyLocationListener implements LocationListener{ 85 86 @Override 87 /*************當手機發生位置改變***************/ 88 public void onLocationChanged(Location location) { 89 // TODO Auto-generated method stub 90 double latitude = location.getLatitude(); // 緯度 91 double longitude = location.getLongitude(); // 經度 92 93 // 將獲取的值保存到首選項中 94 Editor editor = sp.edit(); 95 editor.putString("last_location", "jingdu: " + longitude + " weidu: " + latitude); 96 editor.commit(); 97 } 98 99 @Override 100 /**********當手機的某個位置提供者的狀態發生改變的時候調用***************/ 101 public void onStatusChanged(String provider, int status, Bundle extras) { 102 103 } 104 105 @Override 106 /*******某個位置的提供者可用了************/ 107 public void onProviderEnabled(String provider) { 108 109 } 110 111 @Override 112 /*******某個位置的提供者被禁用掉******************/ 113 public void onProviderDisabled(String provider) { 114 115 } 116 } 117 118 /**********取消監聽********************/ 119 public void unRegisterLocationChangeListener(){ 120 locationManager.removeUpdates(getListener()); 121 } 122 }