Страница 1 из 1

Пауза в MediaPlayer Service

Добавлено: 04 сен 2014, 12:21
Kirill Kirill
Как продолжить проигрывание сервиса MediaPlayer с того места, на котором была нажата кнопка паузы?
Сколько пробую - постоянно песня начинается сначала.

public class BackgroundSoundService extends Service {
MediaPlayer player;
public int currentPos;

public IBinder onBind(Intent arg0) {

return null;
}

@Override
public void onCreate() {
super.onCreate();
final int MAX_VOLUME = 100;
player = MediaPlayer.create(this, R.raw.lightmusic);
player.setLooping(true);
float soundVolume = 77;
final float volume = (float) (1 - (Math.log(MAX_VOLUME - soundVolume) / Math
.log(MAX_VOLUME)));
player.setVolume(volume, volume);

/////////////////player.seekTo(currentPos);
////////////////// player.start();

}

public int onStartCommand(Intent intent, int flags, int startId) {
player.seekTo(currentPos);
player.start();
return 1;
}

public void onStart(Intent intent, int startId) {
////////////////player.seekTo(currentPos);
/////////////////// player.start();
}

@Override
public void onRebind(Intent intent) {

super.onRebind(intent);
}



public void onStop() {
currentPos = player.getCurrentPosition();
player.pause();

}

public void onPause() {
currentPos = player.getCurrentPosition();
player.pause();
}

@Override
public void onDestroy() {
currentPos = player.getCurrentPosition();
player.pause();
//player.release();
}

@Override
public void onLowMemory() {}
}

public void onStart(Intent intent, int startId) {

}

public IBinder onUnBind(Intent arg0) {
// TO DO Auto-generated method
return null;
}

public void onStop() {
player.pause();
}

public void onPause() {
player.pause();
}

@Override
public void onDestroy() {
player.stop();
player.release();
}

@Override
public void onLowMemory() {

}
}



И активити с 2 onClick методами:

public class MainActivity extends QuizActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menu);

startService(new Intent(this, BackgroundSoundService.class));
}

public void stopClick(View v) {
stopService(new Intent(this, BackgroundSoundService.class));
}

public void playClick(View v) {
startService(new Intent(this, BackgroundSoundService.class));
}

@Override
protected void onResume() {
super.onResume();
}
}

Re: Пауза в MediaPlayer Service

Добавлено: 04 сен 2014, 14:10
klblk
метод stopService() убивает сервис и все что с ним связано. Следовательно делая playClick запускается проигрывание с чистого листа. Как сделать правильно не подскажу, вероятно не останавливать сервис. Сам с MediaPlayer почти не работал.
И оформляйте код по человечески на форуме!

Re: Пауза в MediaPlayer Service

Добавлено: 04 сен 2014, 15:14
Kirill Kirill
Прошу прощения за оформление. Скорее всего в этом и есть проблема, что нужно использовать не метод stopService().
Только не могу понять какой :?

Re: Пауза в MediaPlayer Service

Добавлено: 04 сен 2014, 15:21
Kirill Kirill
Да, сервис полностью убивается в методе onDestroy(). А как послать сообщение о паузе сервису, не используя метод stopService()?

Re: Пауза в MediaPlayer Service

Добавлено: 06 ноя 2014, 05:02
sds-83
[syntax=java]public class AudioServise extends Service implements MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener {
.......
public void prevTrack(){
stopId--;
initMediaPlayer(stopId);
Log.d(TAG, "AudioService: prevTrack "+ stopId);
}
public void nextTrack(){

stopId++;
initMediaPlayer(stopId);
Log.d(TAG, "AudioService: nextTrack "+ stopId);

}
public void pauseMediaPlayer(){
mediaPlayer.pause();
PLAY=false;
Log.d(TAG, "AudioService: pauseMediaPlayer");
}
public void resumeMediaPlayer(){
mediaPlayer.start();
PLAY=true;
Log.d(TAG, "AudioService: resumeMediaPlayer");
}


public void initMediaPlayer(int track){
stopId=track;
if(mediaPlayer!=null){
mediaPlayer.stop();
mediaPlayer.reset();
mediaPlayer.release();
}
mediaPlayer=new MediaPlayer();
try{
AssetFileDescriptor descriptor = getApplication().getAssets().openFd("sounds/"+stops.stopsSound[stopId]);
long start = descriptor.getStartOffset();
long end = descriptor.getLength();
mediaPlayer.setDataSource(descriptor.getFileDescriptor(),start,end);

}catch (IOException e){
Log.d(TAG, "Could not open file " + stops.stopsSound[stopId] + " for playback.", e);
}

mediaPlayer.setOnPreparedListener(this);
mediaPlayer.prepareAsync();

mediaPlayer.setOnErrorListener(this);
mediaPlayer.setOnCompletionListener(this);[/syntax]

Re: Пауза в MediaPlayer Service

Добавлено: 06 ноя 2014, 11:41
doter.ua
Если сервис уже создан, то startService будет дергать onStartCommand (Если не создан - то еще и онКреэйт). Передавай интент с экстра с int как код, читай его и switch case.
int defaultValue = 0;
int code = intent.getIntExtra("name", defaultValue)

switch(code){
case 1: //todo
}

Лучше использовать константы типа public static final int SERVICE_STOP = 1;