2

startActivityForResult を使用してリストビューから音楽ファイルのパスを取得し、その文字列を MediaPlayer に設定します。MediaPlayer.setDataSource(STRING);初めてボタンで曲を再生すると、すべて正常に再生されます。曲の再生中にボタンをクリックすると、リセットされて再度再生されます。

  if (mMediaPlayer.isPlaying()) {
                  mMediaPlayer.reset();
         }

しかし、再生が完了したボタンをタップすると、再び再生されません。

startActivityForResult

Intent i = new Intent(MainActivity.this, Activityone.class);
                    startActivityForResult(i, 0);
                    mMediaPlayer.reset();

リストビューで:

 music_column_index = musiccursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
String filename = musiccursor.getString(music_column_index);
Intent person = new Intent();
Bundle backpack = new Bundle();
backpack.putString("arnswer", filename);
person.putExtras(backpack);
setResult(RESULT_OK, person);
finish();

onActivityResult :

  if (resultCode == RESULT_OK){
               if(requestCode == 0) {
                // handling code of startActivityForResult of first button
               Bundle basket = data.getExtras();
                 s = basket.getString("arnswer");
    }

および MediaPlayer を開始するためのボタン:

public void pbutton1(View view) {
       try {
           if (mMediaPlayer.isPlaying()) {
                 mMediaPlayer.reset();
        }
         mMediaPlayer.setDataSource(s); //using string here
         mMediaPlayer.prepare();
        mMediaPlayer.start();
   } catch (Exception e) {

   }

LogCat :

ここに画像の説明を入力

4

2 に答える 2

1

mMediaPlayer.seekTo(0)終わったので、リプレイする必要があると思います。

Android ドキュメント ページを参照してください


編集:

<->ここに画像の説明を入力の間の図を見ると、プレーヤーを再起動するための 1 つのアクションしかないように思えます...必要はありません:( ...StartedPlaybackCompletedprepare

私はあなたが望むprepare理由を理解していますので、状態に移行して次の準備ができるように提案OnCompletetionListenerします!mMediaPlayer.stop()Stoppedprepare()

于 2013-02-24T17:19:56.913 に答える
0

このコードは完全に機能します。お役に立てれば幸いです。

public class PianoActivity extends Activity {

private MediaPlayer mediaPlayer = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_piano);
    setupUI();
}

@Override
protected void onPause() {
    super.onPause();
    if (mediaPlayer != null) {
        mediaPlayer.release();
        mediaPlayer = null;
    }
}

private void setupUI() {
    findViewById(R.id.doo).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            managerOfSound();
        }
    });
}

private void managerOfSound() {
    mediaPlayer = MediaPlayer.create(this, R.raw.doo);
    if (!mediaPlayer.isPlaying()) {
        mediaPlayer.start();
    } else {
        mediaPlayer.stop();
    }
    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            mp.reset();
            mp.release();
        }
    });
}

}

于 2015-10-25T06:40:16.173 に答える