Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android通過gps獲取到當前位置

android通過gps獲取到當前位置

編輯:關於Android編程

定位有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);
	}
}


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved