Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MediaPlayer只播放一次_Java_Android_Android Listview_Android Mediaplayer - Fatal编程技术网

Java MediaPlayer只播放一次

Java MediaPlayer只播放一次,java,android,android-listview,android-mediaplayer,Java,Android,Android Listview,Android Mediaplayer,我使用startActivityForResult从列表视图中获取音乐文件的路径,然后使用MediaPlayer.setDataSource(string)为MediaPlayer设置该字符串第一次使用按钮播放歌曲时,它可以正常播放,如果在播放歌曲时单击按钮,它将重置并再次播放 if (mMediaPlayer.isPlaying()) { mMediaPlayer.reset(); } 但如果我点击按钮播放完成,它将不会再次播放

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

  if (mMediaPlayer.isPlaying()) {
                  mMediaPlayer.reset();
         }
但如果我点击按钮播放完成,它将不会再次播放

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

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

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

   }
日志:


我认为您需要
mmediplayer.seekTo(0)
才能重播,因为它已经完成了


编辑:

查看
已启动
播放已完成
之间的图表似乎只是重新启动播放器的一个操作。。。您不需要准备您所拥有的(


我理解您希望
prepare
的原因,因此我建议
OnCompletetionListener
mMediaPlayer.stop()
,以便移动到
Stopped
状态并准备好下一步
prepare()

我认为您需要
mMediaPlayer.seekTo(0)
,以便重播,因为它已经完成


编辑:

查看
已启动
播放已完成
之间的图表似乎只是重新启动播放机的一个操作…您不需要
准备
,您有:(


我理解您希望
prepare
的原因,因此我建议
OnCompletetionListener
mMediaPlayer.stop()
,以便移动到
Stopped
状态,并为下一步
prepare()

此代码非常有效。我希望能帮助您

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

}

这段代码运行得很好。我希望能帮助您

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

}

这样只会播放两次声音。好多了!添加了其他建议!我刚刚添加了OnCompletionListener并添加了mmediplayer.stop(),结果仍然相同,歌曲完成后,在我不重新加载之前无法再次播放,这样只能播放两次声音。更好!添加了其他建议!我刚刚添加了OnCompletionListener并添加了mmediplayer.stop(),结果仍然相同,歌曲完成后,在我不重新加载之前无法再次播放