gpt4 book ai didi

java - 如何在不到达当前歌曲结尾的情况下播放 MediaPlayer 的下一首歌曲

转载 作者:行者123 更新时间:2023-12-01 12:46:35 24 4
gpt4 key购买 nike

我有一个音乐播放器应用程序,它会剪切应该播放轨道的哪一部分。我的问题是即使当前媒体播放器轨道尚未到达歌曲末尾,如何播放下一首歌曲。我还尝试调用 onCompletion :

mplayer.stop();

Log.v("PLAYER", "Audio track Stopped");
checkTrackStatus();
songHandler.removeCallbacks(uxUpdater);
if(fis!=null)fis=null;

if((currentTrack+1) < songs.size())
{

Log.v("Move to next track", songs.get(currentTrack+1).get("songTitle"));
//mplayer.release();
mplayer=null;
currentTrack++;
playSong(currentTrack);

}else
Toast.makeText(getApplication(), "All tracks played", Toast.LENGTH_LONG).show();

播放歌曲方法:

public void playSong(final int songIndex)
{
File toPlay = new File(songs.get(songIndex).get("songPath"));

lblTrackText.setText("Playing ["+(songIndex+1)+"/"+songs.size()+"]");
lblTrackTitle.setText(songs.get(songIndex).get("songTitle"));
//lblTrackTitle.setSelected(true);


Log.v("PLAY SONG : ", toPlay.getPath());
if(toPlay.exists())
{
//playAudio(toPlay);

try{

mplayer = new MediaPlayer(this);
//mplayer.setOnCompletionListener(this);
fis=new FileInputStream(new File(songs.get(songIndex).get("songPath"))); //ORIGINAL 'p'
mplayer.setDataSource(fis.getFD());//need to add permission in manifest to play .m4a files "ACCESS_NETWORK_STATE"

mplayer.prepare();




//final String s =p;
mplayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

//getTotalTrackDuration

@Override
public void onPrepared(MediaPlayer mp) {
mplayer.seekTo(Integer.parseInt(songs.get(songIndex).get("songStart")));
mplayer.start();
//lblTotal.setText(timeConverter(mplayer.getDuration()));
setTrackNo();

//Log.v("NOW PLAYING ", s);
updateProgress();
}
});

} catch (Exception e) {
Log.e("AUDIO PLAYER", "error: " + e.getMessage(), e);
}

}
else
Toast.makeText(getApplication(), songs.get(songIndex).get("songTitle")+" does not exist or is already deleted", Toast.LENGTH_LONG).show();


}

我总是收到错误消息

错误(1,-541478725)致命信号 11 (SIGSEGV) 位于 0x00002ad8(代码=1)

顺便说一句,我正在使用 vitamio 媒体播放器。

任何帮助都会很棒..谢谢

最佳答案

您收到的错误表明 native 代码中存在错误,该错误一定存在于 Vitamino 媒体播放器中。您收到的错误似乎是内存错误,这让我认为资源没有释放并且设备内存不足。

尝试添加通话:

fis.close()

在你的代码之前:

if(fis!=null)fis=null;

确保您正确关闭上一首歌曲的流。

来自this answer您的问题也可能是您加载了大量图像和声音并导致应用内存不足。似乎具有不同 Android 版本的不同设备可以以不同的方式处理此问题,这意味着该应用程序可以在一部手机上运行,​​但不能在另一部手机上运行。

关于java - 如何在不到达当前歌曲结尾的情况下播放 MediaPlayer 的下一首歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24646938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com