Как мне продолжить музыку?
У моего 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 ответ
Службы работают в потоке основного пользовательского интерфейса, и похоже, что вы не создали другой поток для обработки музыки, воспроизводимой в фоновом режиме. Попробуйте создать новую тему, которая, в свою очередь, запустит игрока. Я думаю, что это очень поможет.