定位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 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值