Как мне продолжить музыку?

У моего Android-приложения проблемы с воспроизведением фоновой музыки.

Я написал код для воспроизведения музыки через приложение... Но когда я нажимаю кнопку, чтобы перейти к новому действию.class. Музыка отстает на пару секунд.... ИЛИ перезапускается с начала?

Это мой код: MusicService.java

public class MusicService extends Service implements
    MediaPlayer.OnErrorListener {

private final IBinder mBinder = new ServiceBinder();
private MediaPlayer mPlayer;
public static int length = 0;

public MusicService() {
}

public class ServiceBinder extends Binder {
    MusicService getService() {
        return MusicService.this;
    }
}

@Override
public IBinder onBind(Intent arg0) {
    return mBinder;
}

@Override
public void onCreate() {
    super.onCreate();

    mPlayer = MediaPlayer.create(MusicService.this, R.raw.bgmusic);
    mPlayer.setOnErrorListener(this);

    if (mPlayer != null) {
        mPlayer.setLooping(true);
        mPlayer.setVolume(100, 100);
    }

    mPlayer.setOnErrorListener(new OnErrorListener() {

        public boolean onError(MediaPlayer mp, int what, int extra) {

            onError(mPlayer, what, extra);
            return true;
        }
    });
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d("Moron Test", "Moron Test OnStart Length : " + length);
    if(length == 0)
    {
        mPlayer.start();
    }
    else
    {
        resumeMusic();
    }
    return START_STICKY;
}


public void pauseMusic() {
    if (mPlayer != null && mPlayer.isPlaying()) {
        mPlayer.pause();
        length = mPlayer.getCurrentPosition();
    }
    Log.d("Moron Test", "Moron Test pauseMusic Length : " + length);
}

public void resumeMusic() {
    Log.d("Moron Test", "Moron Test resumeMusic Length : " + length);
    if (mPlayer != null && mPlayer.isPlaying() == false) {
        mPlayer.seekTo(length);
        mPlayer.start();
    }
    else
    {
        mPlayer.start();
    }
}

public void stopMusic() {
    mPlayer.stop();
    mPlayer.release();
    mPlayer = null;
}

@Override
public void onDestroy() {
    super.onDestroy();
    if (mPlayer != null) {
        try {
            pauseMusic();
            mPlayer.stop();
            mPlayer.release();
        } finally {
            mPlayer = null;
        }
    }
}

public boolean onError(MediaPlayer mp, int what, int extra) {

    Toast.makeText(this, "music player failed", Toast.LENGTH_SHORT).show();
    if (mPlayer != null) {
        try {
            mPlayer.stop();
            mPlayer.release();
        } finally {
            mPlayer = null;
        }
    }
    return false;
}

}

и мой другой код: WAEBaseActivity.java

   public class WAEBaseActivity extends Activity {
Intent svc;
boolean isServiceStarted;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    isServiceStarted = false;
}
@Override
protected void onResume() {
    super.onResume();
    try {
        if (Prefs.getMusic(this)) {
            svc = new Intent(this, MusicService.class);
            startService(svc);
            isServiceStarted = true;
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

@Override
protected void onPause() {
    super.onPause();
    if(isServiceStarted)
        stopService(svc);

}

}

В моем обычном приложении Every .class у меня есть эта строка кода

public class Home extends WAEBaseActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    MusicService.length = 0;

Вот об этом. Спасибо за вашу помощь

Вахид

1 ответ

Службы работают в потоке основного пользовательского интерфейса, и похоже, что вы не создали другой поток для обработки музыки, воспроизводимой в фоновом режиме. Попробуйте создать новую тему, которая, в свою очередь, запустит игрока. Я думаю, что это очень поможет.

Другие вопросы по тегам