定位LocationManager


定位類型:
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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM