In my Activity I have instance variables LocalBinder mBinder ;ServiceConnection mConnection; andboolean mBound;`
In onCreate I instantiate a ServiceConnection and set it to mConnection like this:
mConnection=new ServiceConnection()
{
public void onServiceConnected(ComponentName class name,IBinder service){
Log.d(TAG,"Service connected");
mBinder=(LocalService.LocalBinder)service;
}
And I set mBinder to null in onServiceDisconnected(ComponentName className)
The problem seems to be that the call to bind the a service using:
Intent intent=new Intent(MainActivity.this,LocalService.class);
bindService(intent,mConnection,Context.BIND_AUTO_CREATE);
never occurs...thus ServiceConnection is never called...and when I use a public method in the LocalBinder class it throws an exception because binder is null.
I have a non-null ServiceConnection object and am using the right context.The Activity is launched on app start.The LocalBinder is as you might have guessed a static inner class of LocalService.
The Local Service looks like this:
static class LocalBinder
{
public int getRandomNumber()
{
return (int)(Math.random()*100);
}
}
public IBinder onBind(Intent intent)
{
LocalBinder binder=new LocalBinder();
return binder;
}
The service starts when I implement onStartCommand and startService(intent); but it won't bind...Service Connected will not display even though bindService returns true...thus the IBinder is not passed to the Activity causing a NullPointerException
I don't think you're supposed to create a ServiceConnection()--rather, I think you implement the ServiceConnection interface in your Activity, then pass the Activity in bindService:
You'll also need to implement onServiceDisconnected(). Hope that helps.