Vous pouvez accéder à votre service en vous liant à lui. Modifiez votre classe de service pour qu'elle renvoie un IBinder onBind()
public class MyService extends Service {
private static final String TAG = MyService.class.getSimpleName();
private final IBinder binder = new ServiceBinder();
private boolean a;
@Override
public IBinder onBind( Intent intent ) {
return binder;
}
@Override
public int onStartCommand( Intent intent, int flags, int startId ) {
return super.onStartCommand( intent, flags, startId );
}
@Override
public void onCreate() {
super.onCreate();
}
public class ServiceBinder extends Binder {
public MyService getService() {
return MyService.this;
}
}
public void setA(boolean a) {
this.a = a;
}
}
Maintenant, dans votre activité, vous devez gérer l'attachement et le désattachement à votre service. Dans cet exemple, le service reste en place, que vous soyez lié ou non. Si ce n'est pas la fonctionnalité que vous voulez, vous pouvez simplement ne pas appeler startService(...)
:
public class MyActivity extends Activity {
//...
private MyService myService;
private boolean bound;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent( this, MyService.class );
startService( intent );
doBindService();
}
private final ServiceConnection serviceConnection = new ServiceConnection() {
public void onServiceConnected( ComponentName className, IBinder service ) {
myService = ( (MyService.ServiceBinder) service ).getService();
bound = true;
}
public void onServiceDisconnected( ComponentName className ) {
myService = null;
bound = false;
}
};
void doBindService() {
boolean bound = bindService( new Intent( this, MyService.class ), serviceConnection, Context.BIND_AUTO_CREATE );
if ( bound ) {
Log.d( TAG, "Successfully bound to service" );
}
else {
Log.d( TAG, "Failed to bind service" );
}
}
void doUnbindService() {
unbindService( serviceConnection );
}
}
Maintenant, vous avez une référence à votre service lié dans votre activité et vous pouvez simplement appeler myService.setA(true)
pour définir votre paramètre.