On android how would I create a class that extends Location Listener so that both my main activity and Intent Service can use the same object?

StackOverflow https://stackoverflow.com//questions/9607086

Question

So I'm planning create an app that needs to obtain the user's location and it's going to have a class called LocationController that implements the LocationListener interface.

What I want to achieve is that as soon as the the main activity (call it MainActivity for now) is started (in its onCreate method) to call my LocationController object and have it start getting location fixes and updates.

However, I also need to implement an IntentService or Service that will continue running even after the main activity is shut down (i.e. called onPause and or onStop) and this service needs to access the very same LocationController object that the main activity started in the onCreate method to obtain some location readings.

Now, I've spent some time looking at how to pass data to from an activity to a service and looked at Serializable, Bundle and Parcel objects and none of them can pass LocationListener or Location objects so that's not much of an option for me (unless I missed something, in which case, I'm open to suggestions).

The other option I thought about was maybe with static objects. Basically, have the LocationController be a static class so that the MainActivity can call its methods to start getting location fixes but so that it also continues to exist even after MainActivity had been terminated. However, I'm still fuzzy about how to do this. For example do I make my entire LocationController a static object or do I make some of its methods static?

Can anyone help me with this?

UPDATE:

So I took kabuko's advice and wrote the following on the main activity class:

public void setLocationController() {
    if (locationController == null)
        this.locationController = new LocationController(this);
}

and

public static LocationController getLocationController() {
    // make sure to have called setLocationController() early in your
    // activity's life. onCreate is a good place
    return this.locationController;
}

, which, sets a creates a Singleton, but to access the Location Controller in my IntentService class (call it MyService), I accessed the location controller as a static member of the main activity class like so:

public class MyService extends IntentService {
    private LocationController locationController = null;

    public MyService() {
      super("MyService");
      locationController = MainActivity.getLocationController();
      ...
    }

....

}   // end of class
Was it helpful?

Solution

You can make a singleton instance of your LocationController class which is essentially "making your entire LocationController a static object". Just keep in mind that with your activity stopped, your service is the thing that maintains the lifetime of your application. If you want it long-running and handling multiple "tasks", you might want to be careful with IntentService which shuts down once it's out of work (possibly killing your app and your singleton).

OTHER TIPS

better have a service, register a locationlistener in it, and pass the location updates to Activity by sending broadcast intent, through receiver.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top