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;
}
}
相关阅读
我们在java开发时,使用Thumbnails工具类能帮助我们对图片进行很好的处理,Thumbnails对图片的操作进行了很好的封装,往往很复杂的步骤
使用百度地图api模拟实时定位页面 完整示例 效果:使用百度地图api在页面上显示车辆的实时位置,并有自动刷新和手动刷新两种方
进行战略定位,只有站在更高的层面先去理解这件事,才能更好的具备战略思维,将计划落地。最近在网上看到不少文章,从产品架构上对各大知
朋友们不要介意我把标题写的这么疯狂,大家都知道一款经典的工具类产品不是随随便便就可以做出来的,也不是我可以随随便便做出来的,一
语音识别(二)——基本框架, Microphone Array, 声源定位
基本框架 语音识别系统主要有四部分组成:信号处理和特征提取、声学模型、语言模型(Language Model, LM)和解码器(Decoder)。 信号