zoukankan      html  css  js  c++  java
  • Android GPS获取当前位置信息

    package com.example.gpstest;
    
    import org.apache.http.util.LangUtils;
    
    import android.content.Context;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    import android.location.Criteria;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.text.TextUtils;
    
    /**
     * 保证这个类只存在一个实例 
     * @author zehua
     *
     */
    public class GPSInfoProvider {
    	LocationManager manager;
    	private static GPSInfoProvider mGPSInfoProvider;  //单例
    	private static Context context;             //单例
    	private static MyLoactionListener listener; //单例
      //1.私有化构造方法
    	
    	private GPSInfoProvider(){};
    	
      //2. 提供一个静态的方法 可以返回他的一个实例
    	public static synchronized GPSInfoProvider getInstance(Context context){
    		if(mGPSInfoProvider==null){
    			synchronized (GPSInfoProvider.class) {
    				if(mGPSInfoProvider == null){
    					mGPSInfoProvider = new GPSInfoProvider();
    					GPSInfoProvider.context = context;
    				}
    			}
    		}
    		return mGPSInfoProvider;
    	}
    	
    	
    	// 获取gps 信息 
    	public String getLocation(){
    		manager =(LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    		//获取所有的定位方式
    		//manager.getAllProviders(); // gps //wifi //
    		//获取当前手机最好的位置提供者
    		String provider = getProvider(manager);
    		// 注册位置的监听器 
    		//60000每隔一分钟获取当前位置(最大频率)
    		//位置每改变50米重新获取位置信息
    		//getListener()位置发生改变时的回调方法
    		manager.requestLocationUpdates(provider,60000, 50, getListener());
    		//拿到最后一次的位置信息
    		SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
    		String location = sp.getString("location", "");
    		return location;
    	}
    	
    
    	
    	//停止gps监听
    	public void stopGPSListener(){
    		manager.removeUpdates(getListener());
    	}
    	
    	//获取gps监听实例
    	private synchronized MyLoactionListener getListener(){
    		if(listener==null){
    			synchronized (GPSInfoProvider.class) {
    				if(listener == null){
    					listener = new MyLoactionListener();
    				}
    			}
    			
    		}
    		return listener;
    	}
    	
    	private class MyLoactionListener implements LocationListener{
    
    		/**
    		 * 当手机位置发生改变的时候 调用的方法
    		 */
    		public void onLocationChanged(Location location) {
    			String latitude ="latitude "+ location.getLatitude(); //获取纬度  
    			String longtitude = "longtitude "+ location.getLongitude(); //获取精度
    			//最后一次获取到的位置信息 存放到sharedpreference里面
    			SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
    			Editor editor = sp.edit();
    			editor.putString("location", latitude+" - "+ longtitude);
    			editor.commit(); 
    		}
    
    		/**
    		 * 某一个设备的状态发生改变的时候 调用
    		 *  可用->不可用  
    		 *  不可用->可用
    		 *  status 当前状态
    		 *  extras 额外消息
    		 */
    		public void onStatusChanged(String provider, int status, Bundle extras) {
    			
    		}
    
    		/**
    		 * 某个设备被打开
    		 */
    		public void onProviderEnabled(String provider) {
    
    		}
    
    		/**某个设备被禁用
    		 * 
    		 */
    		public void onProviderDisabled(String provider) {
    			
    		}
    		
    	}
    	
    	/**
    	 * 
    	 * @param manager 位置管理服务
    	 * @return 最好的位置提供者
    	 */
    	private String getProvider(LocationManager manager){
    		//设置查询条件
    		Criteria criteria = new Criteria();
    		//定位精准度
    		criteria.setAccuracy(Criteria.ACCURACY_FINE);
    		//对海拔是否敏感
    		criteria.setAltitudeRequired(false);
    		//对手机耗电性能要求(获取频率)
    		criteria.setPowerRequirement(Criteria.POWER_MEDIUM);
    		//对速度变化是否敏感
    		criteria.setSpeedRequired(true);
    		//是否运行产生开销(费用)
    		criteria.setCostAllowed(true);
    		//如果置为ture只会返回当前打开的gps设备
    		//如果置为false如果设备关闭也会返回
    		return  manager.getBestProvider(criteria, true);
    	}
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

  • 相关阅读:
    js事件冒泡替我背了很多黑锅 嘿嘿
    opencvmin函数
    关于Block Formatting Context--BFC和IE的hasLayout
    javascript面向对象包装类Class的类库解析
    nodejs中exports与module.exports的区别
    ie6固定定位层fixed
    CSS的类名交集复合选择器
    遮罩层覆盖整个页面
    nodejs的require模块及路径
    struts.properties配置详解
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469681.html
Copyright © 2011-2022 走看看