首页 > 代码库 > android通过gps获取到当前位置

android通过gps获取到当前位置

   定位有GPS定位和基站定位:GPS定位是基于卫星进行定位,要求头顶要空旷,定位误差在2-10米,基站网络定位是根据距离手机的距离进行定位,误差较大,只要手机有信号即可定位;获取gps信息分为以下几步:

     1)获取与位置相关的服务  服务都是通过上下文获取出来的 

manager =(LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    2)选择一种目前状态下最好的定位方式 gps定位或者基站定位

/**	 * 	 * @param manager 位置管理服务	 * @return 最好的位置提供者    // gps //wifi //	 */	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);//产生开销  通信费用 		//返回最好的位置提供者   true 表示只返回当前已经打开的定位设备		return  manager.getBestProvider(criteria, true);	}


3)位置的监听器

4)注册位置监听器

 代码如下:  

/** * 保证这个类只存在一个实例          1 私有化构造方法 (我们不能在外部实例化这个类的对象,只能类的内部实例化一个Person类的对象) *                       2 提供一个静态的返回实例的方法   *  * */public class GPSInfoProvider {	LocationManager manager;	//单例	private static GPSInfoProvider mGPSInfoProvider;	private static Context context;	//单例	private static MyLoactionListener listener;  //1.私有化构造方法		private GPSInfoProvider(){};	  //2. 提供一个静态的方法 可以返回他的一个实例   保证代码必须执行完成 放在 synchronized  单态的GPSInfoProvider	public static synchronized GPSInfoProvider getInstance(Context context){		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);		// 注册位置的监听器    		/**		 *provider 定位方式 用什么设备定位  基站 网络 GPS AGPS		 *时间 gps 多长时间重新获取一下位置  最小为1分钟 		 *位置 最短位移 位置改变多少 重新获取一下位置 		 *listener 位置发生改变时 对应的回调方法    		 */		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(){		//参数为LocationListener		manager.removeUpdates(getListener());	}		//返回Listener实例 	private synchronized MyLoactionListener getListener(){		if(listener==null){			listener = new MyLoactionListener();		}		return listener;	}		private class MyLoactionListener implements LocationListener{		/**		 * 当手机位置发生改变的时候 调用的方法		 */		public void onLocationChanged(Location location) {			String latitude ="latitude "+ location.getLatitude(); //weidu 			String longtitude = "longtitude "+ location.getLongitude(); //jingdu			SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);			Editor editor = sp.edit();			editor.putString("location", latitude+" - "+ longtitude);			editor.commit(); //最后一次获取到的位置信息 存放到sharedpreference里面		}		/**		 * 某一个设备的状态发生改变的时候 调用 可用->不可用  不可用->可用                   GPS是否可用  		 */		public void onStatusChanged(String provider, int status, Bundle extras) {					}		/**		 * 某个设备被打开   GPS被打开		 */		public void onProviderEnabled(String provider) {					}		/**某个设备被禁用     GPS被禁用  		 * 		 */		public void onProviderDisabled(String provider) {					}			}		/**	 * 	 * @param manager 位置管理服务	 * @return 最好的位置提供者    // gps //wifi //	 */	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);//产生开销  通信费用 		//返回最好的位置提供者   true 表示只返回当前已经打开的定位设备		return  manager.getBestProvider(criteria, true);	}}