package com.blankj.androidutilcode.service; import android.app.Service; import android.content.Intent; import android.location.Location; import android.os.Binder; import android.os.Bundle; import android.os.IBinder; import android.os.Looper; import android.support.annotation.Nullable; import com.blankj.utilcode.util.LocationUtils; import com.blankj.utilcode.util.ToastUtils; /** * <pre> * author: Blankj * blog : http://blankj.com * time : 2016/11/21 * desc : Location服务 * </pre> */ public class LocationService extends Service { private boolean isSuccess; private String lastLatitude = "loading..."; private String lastLongitude = "loading..."; private String latitude = "loading..."; private String longitude = "loading..."; private String country = "loading..."; private String locality = "loading..."; private String street = "loading..."; private OnGetLocationListener mOnGetLocationListener; public void setOnGetLocationListener(OnGetLocationListener onGetLocationListener) { mOnGetLocationListener = onGetLocationListener; } private LocationUtils.OnLocationChangeListener mOnLocationChangeListener = new LocationUtils.OnLocationChangeListener() { @Override public void getLastKnownLocation(Location location) { lastLatitude = String.valueOf(location.getLatitude()); lastLongitude = String.valueOf(location.getLongitude()); if (mOnGetLocationListener != null) { mOnGetLocationListener.getLocation(lastLatitude, lastLongitude, latitude, longitude, country, locality, street); } } @Override public void onLocationChanged(final Location location) { latitude = String.valueOf(location.getLatitude()); longitude = String.valueOf(location.getLongitude()); if (mOnGetLocationListener != null) { mOnGetLocationListener.getLocation(lastLatitude, lastLongitude, latitude, longitude, country, locality, street); } country = LocationUtils.getCountryName(Double.parseDouble(latitude), Double.parseDouble(longitude)); locality = LocationUtils.getLocality(Double.parseDouble(latitude), Double.parseDouble(longitude)); street = LocationUtils.getStreet(Double.parseDouble(latitude), Double.parseDouble(longitude)); if (mOnGetLocationListener != null) { mOnGetLocationListener.getLocation(lastLatitude, lastLongitude, latitude, longitude, country, locality, street); } } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } }; @Override public void onCreate() { super.onCreate(); new Thread(new Runnable() { @Override public void run() { Looper.prepare(); isSuccess = LocationUtils.register(0, 0, mOnLocationChangeListener); if (isSuccess) ToastUtils.showShortSafe("init success"); Looper.loop(); } }).start(); } @Nullable @Override public IBinder onBind(Intent intent) { return new LocationBinder(); } public class LocationBinder extends Binder { public LocationService getService() { return LocationService.this; } } @Override public void onDestroy() { LocationUtils.unregister(); // 一定要制空,否则内存泄漏 mOnGetLocationListener = null; super.onDestroy(); } /** * 获取位置监听器 */ public interface OnGetLocationListener { void getLocation( String lastLatitude, String lastLongitude, String latitude, String longitude, String country, String locality, String street ); } }