У меня проблема с привязкой сервиса к активности в Android. Проблема возникает в деятельности:
public class ServiceTestActivity extends Activity {
private static final String TAG = "ServiceTestAct";
boolean isBound = false;
TestService mService;
public void onStopButtonClick(View v) {
if (isBound) {
mService.stopPlaying();
}
}
public void onPlayButtonClick(View v) throws IllegalArgumentException, IllegalStateException, IOException, InterruptedException {
if (isBound) {
Log.d(TAG, "onButtonClick");
mService.playPause();
} else {
Log.d(TAG, "unbound else");
Intent intent = new Intent(this, TestService.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}
}
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
isBound = false;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
LocalBinder binder = (LocalBinder) service;
mService = binder.getService();
isBound = true;
}
};
}
isBound сообщает, связан ли сервис (называемый TestService) с действием.
mService - это ссылка на сервис.
Теперь, если я вызываю "onPlayButton (..)" в первый раз, когда служба не привязана, вызывается bindService (..) и isBound переключается с false на true. Затем, если я снова вызываю «onPlayButton (..)», он вызывает «playPause ()» для объекта службы. Здесь все отлично работает.
Но я хочу, чтобы "playPause ()" вызывался сразу после привязки службы, поэтому я изменил свой код на это:
public void onPlayButtonClick(View v) throws IllegalArgumentException, IllegalStateException, IOException, InterruptedException {
if (isBound) {
Log.d(TAG, "onButtonClick");
mService.playPause();
} else {
Log.d(TAG, "unbound else");
Intent intent = new Intent(this, TestService.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
mService.playPause();
}
}
С этого момента я получаю исключение NullPointerException, поскольку mService не имеет ссылки на привязанный сервис, но все равно имеет значение null. Я проверил это, зарегистрировав значение mService в разных местах кода.
Какие-нибудь советы о том, что я здесь делаю неправильно? Я довольно новичок в программировании (особенно в связывании) сервисов в Android, но я до сих пор не вижу, где основные различия между моими версиями.