必威体育Betway必威体育官网
当前位置:首页 > IT技术

基于LocationManager的定位工具类

时间:2019-08-12 21:10:00来源:IT技术作者:seo实验室小编阅读:55次「手机版」
 

locationmanager

现在开发项目中经常用到定位功能,如果每次都去新写一个监听,太过于繁琐和增加代码重复量,于是写一个定位工具类。

首先,定位的基本流程是实例化一个LocationManager对象,同时获得手机支持的定位Provider,即

LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
List<String> providerList = locationManager.getProviders(true);
常用的定位Provider有GPS:LocationManager.GPS_PROVIDER,和 手机网络的LocationManager.NETWORK_PROVIDER。

然后设置定位监听,locationManager.requestLocationUpdates (String provider, long minTime, float mindistance, LocationListener listener);
,其中,第一个参数为支持的定位参数,GPS或者NETWORK,第二次参数是多少毫秒间隔获取一次位置信息,第三个参数是变化多少米会更新一次位置信息,
第四个参数是位置监听参数,同时在LocationListener的onProviderEnabled(String provider)接口中,可以获取上一次的位置信息,即
Location mLocation = locationManager.getLastKnownLocation(provider)。在onLocationChanged(Location location)
直接获取的位置Location。

最后,可以在应用程序不需要定位监听是取消定位服务,LocationManager.removeUpdates (LocationListener listener)。

具体的工具类,看完整代码:
public class LocationHelper implements LocationListener {

    private static LocationHelper instance = null;
    private LocationManager locationManager = null;
    private Context mContext = null;
    private Location mLocation = null;
    private String provider = null;
    private boolean isListened = false;


    private LocationHelper(Context context) {
        mContext = context;
        locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        List<String> providerList = locationManager.getProviders(true);
        if (providerList.contains(LocationManager.GPS_PROVIDER)) {
            provider = LocationManager.GPS_PROVIDER;
        } else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {
            provider = LocationManager.NETWORK_PROVIDER;
        } else {
            provider = LocationManager.NETWORK_PROVIDER;
        }

        setLocationListener();

    }

    public static LocationHelper getInstance(Context context) {
        if (instance == null) {
            instance = new LocationHelper(context);
        }
        return instance;
    }

    public boolean setLocationListener() {
        if (!isListened && mContext != null) {
            if (PackageManager.permission_GRANTED == ContextCompat.checkSelfPermission(mContext,
                    Manifest.permission.ACCESS_FINE_LOCATION)) {
                locationManager.requestLocationUpdates(provider, 5000, 10, this);
                isListened = true;
            }
        }
        return isListened;
    }

    public void removeLocationListener() {
        if (locationManager != null) {
            if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(mContext,
                    Manifest.permission.ACCESS_FINE_LOCATION)) {
                locationManager.removeUpdates(this);
            }
        }
    }

    @Override
    public void onLocationChanged(Location location) {
        Log.d(this.getClass().getSimpleName(), "lat: " + location.getLatitude()
                + " ,lng: " + location.getLongitude());
        mLocation = location;
    }

    @Override
    public void onStatusChanged(String provider, int i, Bundle bundle) {

    }

    @Override
    public void onProviderEnabled(String provider) {
        if (mContext != null) {
            if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(mContext,
                    Manifest.permission.ACCESS_FINE_LOCATION)) {
                mLocation = locationManager.getLastKnownLocation(provider);
                Log.d(this.getClass().getSimpleName(), "last location lat: " + mLocation.getLatitude()
                        + " ,lng: " + mLocation.getLongitude());
            }
        }
    }

    @Override
    public void onProviderdisabled(String provider) {

    }

    public Location getLocation() {
        return mLocation;
    }
}


                                    

相关阅读

Thumbnails使用方法(图片处理工具类)

我们在java开发时,使用Thumbnails工具类能帮助我们对图片进行很好的处理,Thumbnails对图片的操作进行了很好的封装,往往很复杂的步骤

使用百度地图api模拟实时定位页面 完整示例

使用百度地图api模拟实时定位页面 完整示例 效果:使用百度地图api在页面上显示车辆的实时位置,并有自动刷新和手动刷新两种方

重读特劳特之定位(一):三步构建产品运营战略

进行战略定位,只有站在更高的层面先去理解这件事,才能更好的具备战略思维,将计划落地。最近在网上看到不少文章,从产品架构上对各大知

如何打造一款经典的工具类产品???

朋友们不要介意我把标题写的这么疯狂,大家都知道一款经典的工具类产品不是随随便便就可以做出来的,也不是我可以随随便便做出来的,一

语音识别(二)——基本框架, Microphone Array, 声源定位

基本框架 语音识别系统主要有四部分组成:信号处理和特征提取、声学模型、语言模型(Language Model, LM)和解码器(Decoder)。 信号

分享到:

栏目导航

推荐阅读

热门阅读