• LocationManager 总结


    第一步:添加权限
    <uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>或者
    <uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>

    第二步:获取LocationManager实例

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

    第三步:添加监听
    mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, mListener);
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, mListener);

    第四步:取消监听

    mLocationManager.removeUpdates(mListener);

    其中 mListener 初始化以及 Location的筛选算法(官网)
    private static final int TWO_MINUTES = 1000 * 60 * 2;
    	private LocationManager mLocationManager;
    	private LocationListener mListener = new LocationListener()
    	{
    		public void onProviderEnabled(String provider)
    		{
    
    		}
    
    		public void onProviderDisabled(String provider)
    		{
    
    		}
    
    		public void onLocationChanged(Location location)
    		{
    			Location currentLoaction = mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
    			currentLoaction = checkLocation(location, currentLoaction);
    		}
    
    		public void onStatusChanged(String provider, int status, Bundle extras)
    		{
    			
    		}
    	};
    
    /**
    	 * @param location
    	 * @param currentLoaction
    	 * @return 返回better Loaction
    	 */
    	private Location checkLocation(Location location,Location currentLoaction)
    	{
    		if (isBetterLocation(location, currentLoaction))
    			return location;
    		else
    			return currentLoaction;
    	}
    
    	/**
    	 * Determines whether one Location reading is better than the current
    	 * Location fix
    	 * 
    	 * @param location
    	 *            The new Location that you want to evaluate
    	 * @param currentBestLocation
    	 *            The current Location fix, to which you want to compare the new
    	 *            one
    	 */
    	protected boolean isBetterLocation(Location location, Location currentBestLocation)
    	{
    		if (currentBestLocation == null)
    		{
    			// A new location is always better than no location
    			return true;
    		}
    
    		// Check whether the new location fix is newer or older
    		long timeDelta = location.getTime() - currentBestLocation.getTime();
    		boolean isSignificantlyNewer = timeDelta > TWO_MINUTES;
    		boolean isSignificantlyOlder = timeDelta < -TWO_MINUTES;
    		boolean isNewer = timeDelta > 0;
    
    		// If it's been more than two minutes since the current location, use
    		// the new location
    		// because the user has likely moved
    		if (isSignificantlyNewer)
    		{
    			return true;
    			// If the new location is more than two minutes older, it must be
    			// worse
    		}
    		else if (isSignificantlyOlder)
    		{
    			return false;
    		}
    
    		// Check whether the new location fix is more or less accurate
    		int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation.getAccuracy());
    		boolean isLessAccurate = accuracyDelta > 0;
    		boolean isMoreAccurate = accuracyDelta < 0;
    		boolean isSignificantlyLessAccurate = accuracyDelta > 200;
    
    		// Check if the old and new location are from the same provider
    		boolean isFromSameProvider = isSameProvider(location.getProvider(), currentBestLocation.getProvider());
    
    		// Determine location quality using a combination of timeliness and
    		// accuracy
    		if (isMoreAccurate)
    		{
    			return true;
    		}
    		else if (isNewer && !isLessAccurate)
    		{
    			return true;
    		}
    		else if (isNewer && !isSignificantlyLessAccurate && isFromSameProvider)
    		{
    			return true;
    		}
    		return false;
    	}
    
    	/** Checks whether two providers are the same */
    	private boolean isSameProvider(String provider1, String provider2)
    	{
    		if (provider1 == null)
    		{
    			return provider2 == null;
    		}
    		return provider1.equals(provider2);
    	}
    

      

    
    
  • 相关阅读:
    delphi TMemoryStream读取html文件中文乱码
    tfrxbarcode2dview 和 tfrxbarcode not found 解决办法
    delphi ForceDirectories 用法
    Java Scanner next() 与 nextLine() 区别
    delphi 用superobject解析json
    delphi 方法可以提前声明
    delphi 判断文件是否被占用
    mysql explain用法和结果的含义
    C# SpinWait
    js异步编程
  • 原文地址:https://www.cnblogs.com/lipeil/p/2540061.html
Copyright © 2020-2023  润新知