21
2018
08

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

    }

原文链接:https://www.qiquanji.com/post/8439.html

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

微信扫码关注

更新实时通知

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。