Как продолжить проигрывание сервиса 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();
}
}
Пауза в MediaPlayer Service
-
Kirill Kirill
- Сообщения: 17
- Зарегистрирован: 30 мар 2014, 15:55
Пауза в MediaPlayer Service
Последний раз редактировалось Kirill Kirill 04 сен 2014, 15:12, всего редактировалось 1 раз.
Re: Пауза в MediaPlayer Service
метод stopService() убивает сервис и все что с ним связано. Следовательно делая playClick запускается проигрывание с чистого листа. Как сделать правильно не подскажу, вероятно не останавливать сервис. Сам с MediaPlayer почти не работал.
И оформляйте код по человечески на форуме!
И оформляйте код по человечески на форуме!
-
Kirill Kirill
- Сообщения: 17
- Зарегистрирован: 30 мар 2014, 15:55
Re: Пауза в MediaPlayer Service
Прошу прощения за оформление. Скорее всего в этом и есть проблема, что нужно использовать не метод stopService().
Только не могу понять какой
Только не могу понять какой
-
Kirill Kirill
- Сообщения: 17
- Зарегистрирован: 30 мар 2014, 15:55
Re: Пауза в MediaPlayer Service
Да, сервис полностью убивается в методе onDestroy(). А как послать сообщение о паузе сервису, не используя метод stopService()?
Re: Пауза в MediaPlayer Service
[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]
.......
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
Если сервис уже создан, то 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;
int defaultValue = 0;
int code = intent.getIntExtra("name", defaultValue)
switch(code){
case 1: //todo
}
Лучше использовать константы типа public static final int SERVICE_STOP = 1;
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.