Android - binding to service
- by tommy
Hi: I can't seem to get an activity to bind to a service in the same package.
The activity looks like this:
public class myApp extends TabActivity {
    static private String TAG = "myApp";
    private myService mService = null;
    private ServiceConnection mServiceConn = new ServiceConnection(){
        public void onServiceConnected(ComponentName name, IBinder service) {
            Log.v(TAG, "Service: " + name + " connected");
            mService = ((myService.myBinder)service).getService();
        }
        public void onServiceDisconnected(ComponentName name) {
            Log.v(TAG, "Service: " + name + " disconnected");
        }
    };
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        doBind();
        Log.i(TAG, "Started (UI Thread)");
        // set content
        setContentView(R.layout.main);
        Resources res = getResources(); // Resource object to get Drawables
        TabHost tabHost = getTabHost();  // The activity TabHost
        ... add some tabs here....
        tabHost.setCurrentTab(0);
    }
    private void doBind(){      
        Intent i = new Intent(this,myService.class);
        if( bindService(i, mServiceConn, 0 )){
            Log.i(TAG, "Service bound");
        } else {
            Log.e(TAG, "Service not bound");
        }
    }
}
Then the service:
public class myService extends Service {
    private String TAG = "myService";
    private boolean mRunning = false;
    @Override
    public int onStartCommand(Intent intent, int flags, int startid) {
        Log.i(TAG,"Service start");
        mRunning = true;
        Log.d(TAG,"Finished onStartCommand");
        return START_STICKY;
    }
    /*
     * Called on service stop
     */
    @Override
    public void onDestroy(){
        Log.i(TAG,"onDestroy");
        mRunning = false;
        super.onDestroy();
    }
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }
    boolean isRunning() {
        return mRunning;
    }
    /*
     * class for binding
     */
    private final IBinder mBinder = new myBinder();
    public class myBinder extends Binder {
        myService getService() {
            return myService.this;
        }
    }
}
bindService returns true, but onServiceConnection is never called (mService is always null, so I can't do something like mService.isRunning() )
The manifest entry for the service is just: 
<service android:name=".myService"></service>
I was copying the code direct from the Android developers site, but I must have missed something.