我正在使用沙漏库进行倒计时。假设5分钟。在这段时间里,我反复播放同样的5个音频文件。这很有效。问题在于暂停。当它打开第一个音频时。它暂停并恢复得很好。当它进入下一首歌,我暂停后,它抛出了一个非法状态例外。
代码有点难看。在onCompletion中,它会一直播放文件,直到结束。然后调用playAudio(),循环开始,直到小时刻度达到零。
pause.setOnClickListener(新视图。OnClickListener()是一个浮动操作按钮,我可以在暂停图标和播放图标之间切换
Java类代码
tracks[0] = R.raw.audio0;
tracks[1] = R.raw.audio1;
tracks[2] = R.raw.audio2;
tracks[3] = R.raw.audio3;
tracks[4] = R.raw.audio4;
countDown = (TextView) findViewById(R.id.txtCountdown);
cancel = (FloatingActionButton)findViewById(R.id.cancelMeditation);
pause = (FloatingActionButton)findViewById(R.id.pauseMeditation);
Intent intent = getIntent();
check = intent.getIntExtra("DURATION", -1);
milliseconds = check * 60000;
countDown.setText("" + String.format("%d min",
TimeUnit.MILLISECONDS.toMinutes(milliseconds)));
pause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(hourglass == null){
startTimer(milliseconds);
currentTrack = 0;
isTimerDone = false;
playAudio();
pause.setImageResource(R.drawable.ic_pause);
return;
}
if(hourglass.isPaused()){
hourglass.resumeTimer();
pause.setImageResource(R.drawable.ic_pause);
isPaused = false;
mediaAffyPlayer.seekTo(length);
mediaAffyPlayer.start();
}else if(hourglass.isRunning()){
hourglass.pauseTimer();
pause.setImageResource(R.drawable.ic_play1);
isPaused = true;
if(mediaAffyPlayer != null) {
mediaAffyPlayer.pause();
length = mediaAffyPlayer.getCurrentPosition();
}
} else{
startTimer(milliseconds);
playAudio();
}
}
});
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
public void startTimer(long milliseconds){
hourglass = new Hourglass(milliseconds, 1000) {
@Override
public void onTimerTick(long timeRemaining) {
countDown.setText("" + String.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes(timeRemaining),
TimeUnit.MILLISECONDS.toSeconds(timeRemaining) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(timeRemaining))));
if(TimeUnit.MILLISECONDS.toMinutes(timeRemaining) ==0){
return;
}
}
@Override
public void onTimerFinish() {
isTimerDone = true;
}
};
hourglass.startTimer();
}
private void playAudio(){
if(mediaAffyPlayer == null){
mediaAffyPlayer = MediaPlayer.create(getApplicationContext(), tracks[0]);
mediaAffyPlayer.setOnCompletionListener(this);
mediaAffyPlayer.start();
isPaused = false;
return;
}
if(mediaAffyPlayer != null) {
mediaAffyPlayer.release();
mediaAffyPlayer = MediaPlayer.create(getApplicationContext(), tracks[0]);
mediaAffyPlayer.setOnCompletionListener(this);
isPaused = false;
mediaAffyPlayer.start();
}
mediaAffyPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
return false;
}
});
}
public void onCompletion(MediaPlayer mediaPlayer) {
if (currentTrack < tracks.length - 1) {
if(isTimerDone){
countDown.setText("" + String.format("%d min",
TimeUnit.MILLISECONDS.toMinutes(milliseconds)));
pause.setImageResource(R.drawable.ic_play1);
mediaPlayer.reset();
mediaPlayer.release();
mediaPlayer=null;
hourglass = null;
return;
}
currentTrack++;
mediaPlayer.release();
mediaPlayer = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]);
mediaPlayer.setOnCompletionListener(ShowMeditationActivity.this);
mediaPlayer.start();
} else {
if(!isTimerDone){
currentTrack = 0;
playAudio();
}
}
}
例外
java.lang.IllegalStateException
at android.media.MediaPlayer._pause(Native Method)
at android.media.MediaPlayer.pause(MediaPlayer.java:1512)
将其抛向mediaAffyPlayer.pause();在hourglass.is运行()
我知道代码很难看,但我只是认为当它播放第二首曲目时,媒体播放器对象发生了变化,这就是它抛出错误的原因。我就是不知道怎么修。
非常感谢您的帮助,因为我已经花了很多时间试图修复它。谢谢
编辑我修复了这个问题。
我在OnCompletion中注释掉了创建和播放mediaplayer的代码。我调用playAudio()并将代码插入其中。
private void playAudio(){
if(mediaAffyPlayer == null){
mediaAffyPlayer = MediaPlayer.create(getApplicationContext(), tracks[0]);
mediaAffyPlayer.setOnCompletionListener(this);
mediaAffyPlayer.start();
isPaused = false;
return;
}
if(mediaAffyPlayer != null) {
currentTrack++;
mediaAffyPlayer.release();
mediaAffyPlayer = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]);
mediaAffyPlayer.setOnCompletionListener(ShowMeditationActivity.this);
mediaAffyPlayer.start();
}
isPaused()出现问题
试试这个!!
try{
if (mediaAffyPlayer.isPlaying()) {
mediaAffyPlayer.pause();
}
}catch(Exception we){
we.printStackTrace();
}
我正在开发一个包含一些音频播放器的RecyclerView的应用程序。应用程序将下载。3gp文件(如果尚未下载)。 当我单击playAudio按钮时,音频未被播放。 这是我的适配器代码: 我怎样才能解决这个问题?
问题内容: 我的键盘包含用于执行各种非标准键盘任务的一行按钮。这些键包含诸如修改音量,播放或暂停以及跳过曲目等功能。如何使用Python模拟基本播放/暂停?顺便说一下,我在Windows上。 问题答案: 我会用pywin32。与安装捆绑在一起的是大量的API文档(通常放在。),它实际上包装了Win32库中的许多内容,该库用于Windows中的许多低级任务。 安装后,您可以使用keybd_event
我正在开发一个音频播放器,它可以在后台播放音频文件。我的问题是,当录像机或视频播放器启动时,我需要暂停音频播放器。 有什么方法可以处理这个任务吗?例如,我有来处理这些调用。当我接到呼叫或wnat呼叫时,我们可以使用呼叫状态暂停播放器。我想为录像机或视频播放器以及相同的场景。当视频/录制开始时,我需要暂停音频播放器。
函数名称:暂停音频播放 函数功能: 暂停音频播放 函数方法 media.pause() 函数用例 media.playAudio("/mnt/sdcard/LuaBox/Projects/1/1.mp3",5,true) --把音乐播放到 1 分钟的位置 media.jump(60*1000) mSleep(2000) -- 暂停音频播放 media.pause() 注意事项 目前积木编程函数和
大家好,我正在尝试使用两个独立的媒体播放器实例播放音频和视频文件。当我从一开始播放它时,它工作得很好。但当我寻找时,我可以看到音频和视频的延迟 这是我寻找音频和视频的代码 //sikAudio(msec); if(media播放器!=null) { // 没有直播流,如果(medialayer.get持续时间() }
我正在使用Android Media Player从我的服务器播放音乐。可以使用MediaPlayer将播放音频保存到存储吗?