У меня была такая же проблема, и я не мог заставить ее работать так, как у вас.
Решение состоит в том, чтобы связать Сервис в Деятельности, и затем вы можете получить доступ к MediaPlayer, работающему в Службе, из вашей Деятельности.
Обратите внимание, что для запуска таким образом ваша Служба должна была определитьвсе необходимые методы, такие как getCurrentPosition и т. д.
В своей деятельности добавьте средство привязки:
/******************************************************************
*
* Defines callbacks for service binding, passed to bindService()
*
* ************************************************************** */
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className,
IBinder service) {
// We've bound to LocalService, cast the IBinder and get LocalService instance
LocalBinder binder = (LocalBinder) service;
mService = binder.getService();
mBound = true;
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
mBound = false;
}
};
Затем необходимо изменить методы onStart () и onStop () для привязки / отмены привязки службы.
@Override
protected void onStart() {
super.onStart();
// Bind to LocalService
Intent intent = new Intent(this, MusicService.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onStop() {
super.onStop();
// Unbind from the service
if (mBound) {
unbindService(mConnection);
mBound = false;
}
}
То, что я сделал позже, - это создание следующих методов
public void showMediaControllerHere(){
if (mBound){
mc = new MediaController(mpContext);
mc.setAnchorView(findViewById(R.id.anchorText));
mc.setMediaPlayer(mService);
mc.setEnabled(true);
mc.show(0);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//the MediaController will hide after 3 seconds - tap the screen to make it appear again
if (first){
if (mBound){
showMediaControllerHere();
first = false;
}
}
else {
if (mBound){
mc.show(0);
}
}
return false;
}
Сначала это логическое значение, которое используется, чтобы понять, нужно ли нам создавать медиа-контроллер или нет, я создаю тольков первый раз пользователь касается экрана.