Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android GPS獲取當前位置信息

Android GPS獲取當前位置信息

編輯:關於Android編程

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);
	}
}















 

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