2012-01-21 1 views
2

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

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

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

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(); 
      } 
     } 
    }); 


} 
} 

Любая помощь будет очень признательна, спасибо.

ответ

0

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

if (sound.isPlaying()) { 

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

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

+0

sound.setDataSource (params); Что бы я там положил? – Hairzo

+0

У меня возникли проблемы с установкой setDataSource(); параметр, который мне нужно ввести здесь? – Hairzo

+0

Посмотрите на обновленный ответ ... – Rotemmiz

6

ПРИ START/PAUSE:

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

ПРИ START/STOP:

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.

EDIT: получить FileDescripter

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

EDIT: Я не нашел способ превратить необработанный файл в куда и поэтому я использую статический метод 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(); 
    } 
} 

Alse освободить медиаплеера когда остановите его.

+0

sound.setDataSource (PARAMS); Что бы я там положил? – Hairzo

+0

путь вашей музыки, такой как mnt/sdcard/music/xxx.mp3, или URL-адрес Интернета, также может быть FileDescriptor, как то, что я редактирую в ответ – JohnCookie

+0

У меня нет пути к файлу, я привожу файл в через R.raw.sound1, и setDataSource, похоже, не хочет брать исходный ввод. – Hairzo