Synchronizing activity with service state

by bee » Thu, 12 Mar 2009 10:22:31 GMT


Sponsored Links
 I've got an activity that lets a user start and stop a service, which
then hangs around putting up notifications periodically. I have a
toggle button for turning the service on and off, and I need it to
have the correct state whenever the user runs the activity, depending
on whether the service is already running or not.

Since there doesn't appear to be a way to directly query whether or
not the service is running, my solution was to have the service class
set a boolean "preference" to true in its onCreate() method, and set
it to false in its onDestroy(). The launcher activity in turn checks
the preference set by the service in its onCreate() and sets the
toggle's state accordingly.

service class:
private void savePreference(boolean state) {
        SharedPreferences settings = getSharedPreferences(PING_PREFS,0);
        SharedPreferences.Editor editor = settings.edit();
        editor.putBoolean(KEY_RUNNING, state);
        editor.commit();
}
onCreate() {
    ...
    savePreference(true);
}
onDestroy() {
    ...
    savePreference(false);
}

and the toggle button does:
private OnClickListener mTogListener = new OnClickListener() {
         public void onClick(View v) {
            // Perform action on clicks
            if (tog.isChecked()) {
                Toast.makeText(TimepieController.this, "ON",
Toast.LENGTH_SHORT).show();
                startService(new Intent(TimepieController.this,
                                        PingService.class));
                mStarted = true;
            } else {
                Toast.makeText(TimepieController.this, "OFF",
Toast.LENGTH_SHORT).show();
                        stopService(new Intent(TimepieController.this,
                                        PingService.class));
                        mStarted = false;
            }
        }
};

So it seems to me like this ought to work, however, after I stop the
service if I leave the launcher activity with the "Back" button and
then return, the toggle button is set back to on again. If I leave the
launcher activity with the "Home" button when I return the toggle
button remains off.

Is there some better/more correct way to synchronize the state of the
toggle button with the service? If not, any ideas on what is going
wrong? Why would the way I leave the app effect the state of the
preference? Does stopping the service not necessarily call the
service's onDestroy()?

--~--~---------~--~----~------------~-------~--~----~



Other Threads

1. overlay on dialer

is there a possibility that we can have a activity/icon over the
dialer so that it appears partially super imposed on the dialer.
so that the user would feel that it is attached with the dialer and
also it enables us to take actions on the icon click?

Regards
Sanjeeth

-- 

2. Bluetooth Server in C/C++

Hi,

Has anyone tried using Bluetooth sockets where the server machine is
running C/C++? Android Bluetooth Devices returns a socket from
BluetoothDevice.createRfcommSocketToServiceRecord(UUID) and says in
the reference "designed to be used with
listenUsingRfcommWithServiceRecord(String, UUID) for peer-peer
Bluetooth applications."  I can't use Bluetooth.Socket.connect()
because it does not take any parameters for the remote Bluetooth
Device nor does the Bluetooth Device class have any other methods that
return a socket.

Does anyone know a way around this?

Chirs

-- 

3. How to do animation when click on a bitmap

4. USB driver on Windows 7 64 bit

5. Problem with Maps on android 1.5(HTC hero)

6. Anti-virus, anti-malware scanner and monitor device file system access.

7. Testing of Customized Android SDK