Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: trouble with bindService() -> service is null

I'm having a problem with binding service to an activity. I get playing_service==null. I can't find what I'm doing wrong. Why is playing_service null??

MyActivity class:

private playService playing_service=null;

private ServiceConnection service_conn=new ServiceConnection(){
    public void onServiceConnected(ComponentName className, IBinder service) {
        LocalBinder binder=(LocalBinder)service;
        playing_service=binder.getService();
    }
    public void onServiceDisconnected(ComponentName arg0) {
        // TODO Auto-generated method stub

    }
};

public void playTrack(View view){       
        Intent i=new Intent(this,playService.class);
        i.setAction("com.c0dehunter.soundrelaxer.PLAY");
        bindService(i,service_conn,Context.BIND_AUTO_CREATE);

        if(playing_service==null) //here I get true,
             //if I try to access playing_service I get NullPointerException

    }
}

playService class:

private final IBinder binder=new LocalBinder();

public int onStartCommand(Intent intent, int flags, int startId){       
     return 1; //dummy
}

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return binder;
}

public class LocalBinder extends Binder{
    public playService getService(){
        return playService.this;
    }
}
like image 903
c0dehunter Avatar asked Dec 02 '22 23:12

c0dehunter


1 Answers

Your service might not be null because binding a service is an asynchronous method, so instead of checking the availability of your service yet after calling the bind method, you should do it in your service connection implementation, for e.g.:

private ServiceConnection service_conn=new ServiceConnection(){
    public void onServiceConnected(ComponentName className, IBinder service) {
        LocalBinder binder=(LocalBinder)service;
        playing_service=binder.getService();

        if(playing_service != null){
            Log.i("service-bind", "Service is bonded successfully!");

            //do whatever you want to do after successful binding
        }
    }
    public void onServiceDisconnected(ComponentName arg0) {
        // TODO Auto-generated method stub

    }
};
like image 155
waqaslam Avatar answered Dec 18 '22 06:12

waqaslam