Android Mediaplayer Play / Stop нужна помощь - PullRequest
2 голосов
/ 21 января 2012

Я пытаюсь создать свое первое приложение для Android, и здесь я пытаюсь воспроизвести звук, а затем остановить его с помощью той же кнопки.

Это работает как звук, когда я щелкаю по нему, и останавливается при повторном щелчке, но не воспроизводится, когда я щелкаю по нему в третий раз, чтобы снова запустить звук.

Iу меня в конечном итоге будет несколько звуков здесь, и поэтому хотелось бы знать, правильно ли выложен мой проект?Могу ли я сэкономить время где-нибудь?У меня что-то не так?

package test.soundy.com;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class TestActivity extends Activity {
private MediaPlayer sound;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    sound = MediaPlayer.create(Test.this, R.raw.sound1);  

    Button test = (Button)this.findViewById(R.id.button1);
    test.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (sound.isPlaying()) {
                sound.stop();
            } else {
                sound.start();
            }
        }
    });


}
}

Любая помощь будет высоко ценится, спасибо.

Ответы [ 2 ]

6 голосов
/ 21 января 2012

КОГДА СТАРТ / ПАУЗА:

if(sound.isPlaying()){
    sound.pause();
}else{
    sound.start();
}

КОГДА СТАРТ / ОСТАНОВКА:

if(sound.isPlaying()) {
    sound.stop();
} else {
    sound.reset();
    sound.setDataSource(yourURL);  //or InputStream etc.
    sound.prepare();
    sound.start();
}

Также вы можете использовать sound.seekTo(time) для перехода к позиции.Помните, что если вы хотите воспроизвести новый звук (или перезапустить), сначала вы должны reset, setDataSource, prepare, а затем start it.

EDIT: получить FileDescripter

AssetManager assetManager=Context.getAssets();
AssetFileDescriptor fileDescriptor = assetManager.openFd("a2.mp3");
mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor());

РЕДАКТИРОВАТЬ: я не нашел способ превратить необработанный файл в файловый дескриптор, поэтому я использую статический метод MediaPlayer

MediaPlayer  mediaPlayer = MediaPlayer.create(Activity.this,R.raw.a1);
mediaPlayer.setOnCompletionListener(new musicCompletionListener());
mediaPlayer.start();
private class musicCompletionListener implements OnCompletionListener {
    @Override
    public void onCompletion(MediaPlayer mediaPlayer) {
        mediaPlayer.release();
    }
}

или отпустите медиаплеер при остановке.

0 голосов
/ 21 января 2012

Вы пытались сбросить MP?

if (sound.isPlaying()) {

                sound.stop();
            } else {
                sound.reset();
                sound.prepare();
                sound.start();
            }

Отредактировано ... Полная диаграмма состояний здесь: http://developer.android.com/reference/android/media/MediaPlayer.html

...