在 Android 后台服务中获取当前位置,需要在后台线程中执行。如果在主线程中执行,会导致阻塞 UI,并且后台服务会很快被销毁。
下面是获取当前位置的示例代码:
public class LocationService extends Service implements LocationListener {
private LocationManager locationManager;
private static final int LOCATION_INTERVAL = 1000;
private static final float LOCATION_DISTANCE = 10f;
private class LocationListener implements android.location.LocationListener{
Location lastLocation;
public LocationListener(String provider){
lastLocation = new Location(provider);
}
@Override
public void onLocationChanged(Location location) {
lastLocation.set(location);
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
}
LocationListener[] locationListeners = new LocationListener[]{
new LocationListener(LocationManager.GPS_PROVIDER),
new LocationListener(LocationManager.NETWORK_PROVIDER)
};
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("LocationService", "Start location service.");
super.onStartCommand(intent, flags, startId);
return START_STICKY;
}
@Override
public void onCreate() {
Log.i("LocationService", "Create location service.");
locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
try {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
LOCATION_INTERVAL,
LOCATION_DISTANCE,
locationListeners[1]
);
} catch (SecurityException ex) {
Log.i("LocationService", "Fail to request location update, ignore." + ex.getMessage());
} catch (IllegalArgumentException ex) {
Log.d("LocationService", "Network provider does not exist, " + ex.getMessage());
}
try {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
LOCATION_INTERVAL,
LOCATION_DISTANCE,
locationListeners
上一篇:Android后台服务正在运行,但重新启动后,即使实现了广播接收器,应用程序也没有启动。
下一篇:Android后台服务、MainApplication和ActivityLifecycleCallbacks之间的关系是什么?