【问题标题】:MediaPlayer plays only one timeMediaPlayer 只播放一次
【发布时间】:2013-02-24 17:08:06
【问题描述】:

我使用 startActivityForResult 从我的列表视图中获取音乐文件的路径,然后使用 MediaPlayer.setDataSource(STRING); 为 MediaPlayer 设置该字符串第一次使用按钮播放歌曲时,它可以正常播放,如果我在播放歌曲时单击按钮,它将重置并再次播放。

  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) {

   }

日志猫:

【问题讨论】:

    标签: java android android-listview android-mediaplayer


    【解决方案1】:

    我认为你需要mMediaPlayer.seekTo(0) 才能重播,因为它已经结束了。

    See the android doc page.


    编辑:

    查看 之间的图表Started PlaybackCompleted 似乎只是重启播放器的一个动作......你不需要你拥有的prepare :( ...

    我理解你想要prepare的原因所以我建议OnCompletetionListenermMediaPlayer.stop()以便移动到Stopped状态并为下一个prepare()做好准备! p>

    【讨论】:

    • 那只会播放两次声音。
    • 好多了!添加了其他建议!
    • 我刚刚添加了 OnCompletionListener 并添加了 mMediaPlayer.stop(),结果还是一样,歌曲播放完后无法再次播放,直到我不再加载它
    【解决方案2】:

    此代码完美运行。希望能帮到你。

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

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多