package com.future.driver.utils; import android.annotation.SuppressLint; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import java.util.List; /** * Created by Administrator on 2018/4/17. * 获取用户的地理位置 */ public class GPSUtils { private static GPSUtils instance; private Context mContext; private LocationManager locationManager; private GPSUtils(Context context) { this.mContext = context; } public static GPSUtils getInstance(Context context) { if (instance == null) { instance = new GPSUtils(context); } return instance; } /** * 获取经纬度 * * @return */ public String getLngAndLat(OnLocationResultListener onLocationResultListener) { double latitude = 0.0; double longitude = 0.0; mOnLocationListener = onLocationResultListener; String locationProvider = null; locationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); //获取所有可用的位置提供器 List providers = locationManager.getAllProviders(); // if (providers.contains(LocationManager.GPS_PROVIDER)) { // //如果是GPS // locationProvider = LocationManager.GPS_PROVIDER; // } else if (providers.contains(LocationManager.NETWORK_PROVIDER)) { // //如果是Network // locationProvider = LocationManager.NETWORK_PROVIDER; // } else { // Intent i = new Intent(); // i.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS); // mContext.startActivity(i); // return null; // } Location bestLocation = null; for (String provider : providers) { @SuppressLint("MissingPermission") Location l = locationManager.getLastKnownLocation(provider); if (l == null) { continue; } if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) { // Found best last known location: %s", l); bestLocation = l; } } if (bestLocation != null) { //不为空,显示地理位置经纬度 if (mOnLocationListener != null) { mOnLocationListener.onLocationResult(bestLocation); } } //监视地理位置变化 // locationManager.requestLocationUpdates(locationProvider, 3000, 1, locationListener); //todo 关闭连续定位 return null; } public LocationListener locationListener = new LocationListener() { // Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数 @Override public void onStatusChanged(String provider, int status, Bundle extras) { } // Provider被enable时触发此函数,比如GPS被打开 @Override public void onProviderEnabled(String provider) { } // Provider被disable时触发此函数,比如GPS被关闭 @Override public void onProviderDisabled(String provider) { } //当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发 @Override public void onLocationChanged(Location location) { if (mOnLocationListener != null) { mOnLocationListener.OnLocationChange(location); } } }; public void removeListener() { locationManager.removeUpdates(locationListener); } private OnLocationResultListener mOnLocationListener; public interface OnLocationResultListener { void onLocationResult(Location location); void OnLocationChange(Location location); } }