2012-01-21 16 views
2

私は最初のAndroidアプリケーションを作成しようとしています。私がここで達成しようとしているのは、サウンドを再生してから同じボタンで停止することです。Android Mediaplayer再生/停止のヘルプが必要

クリックすると音が鳴り、もう一度クリックすると音が鳴りますが、3回目にクリックすると再生されません。

私は最終的にここにいくつかの音を持っているので、私のプロジェクトが正しくレイアウトされているかどうか知りたいですか?どこでも時間を節約できますか?私は間違った方法で何かを得たことがありますか?

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

WHEN 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)を使用して、ある位置にスキップすることができます。 新しいサウンドを再生する(または再起動する)ときは、最初にresetsetDataSourceprepare、次にstartとする必要があります。

EDIT:取得FileDescripter

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

編集:私はファイル記述子にRAWファイルを有効にする方法を発見していないので、私は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

関連する問題