Android MediaPlayer随机跳过播放某些文件
我有一个多线程应用程序,其中主线程启动两个线程: 生成请求线程 队列侦听器线程 MakeRequest线程每秒查询LAN上的打印机以请求一些数据并对其执行一些计算,然后将其提供给第二个线程正在侦听的队列。一旦队列中的数据可用,QueueListener线程就会从队列中取出一条记录,并启动另一个线程,即MediaPlayer线程。该线程负责播放7到8个文件,具体取决于接收到的字符串。为此,我使用以下代码Android MediaPlayer随机跳过播放某些文件,android,Android,我有一个多线程应用程序,其中主线程启动两个线程: 生成请求线程 队列侦听器线程 MakeRequest线程每秒查询LAN上的打印机以请求一些数据并对其执行一些计算,然后将其提供给第二个线程正在侦听的队列。一旦队列中的数据可用,QueueListener线程就会从队列中取出一条记录,并启动另一个线程,即MediaPlayer线程。该线程负责播放7到8个文件,具体取决于接收到的字符串。为此,我使用以下代码 MediaPlayer mp = MediaPlayer.create(context, U
MediaPlayer mp = MediaPlayer.create(context, Uri.fromFile(new File(q[voiceIndex])));
mp.setOnCompletionListener(mCompletionListener);
mp.setOnErrorListener(mErrorListener);
mp.start();
此代码位于PlayMedia方法中,在OnCompletionListener中,我有以下代码:
OnCompletionListener mCompletionListener = new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
//will be called when media player finished playing a file.
mp.release();
StartPlayingNextFile();
}
};
private void StartPlayingNextFile() {
voiceIndex++;
if (voiceIndex < q.length){
PlayMedia();
}else{
finishedPlaying = true;
}
}
在第2行和第27行之间跳过了5个文件,即
第2行:
01-21 01:20:18.474:V/MediaPlayerService3240:从pid 15063创建新客户端1854,url=/mnt/sdcard/voicedata/200.wav,connId=1854
第27行:
01-21 01:20:30.504:V/MediaPlayerService3240:从pid 15063创建新客户端1855,url=/mnt/sdcard/voicedata/constants/bell.wav,connId=1855
已跳过的文件包括:
/mnt/sdcard/voicedata/a.wav
/mnt/sdcard/voicedata/b.wav
/mnt/sdcard/voicedata/c.wav
/mnt/sdcard/voicedata/d.wav
/mnt/sdcard/voicedata/e.wav
bell.wav是第一个在所有这些文件之前播放的文件。经过严格测试,我发现减少文件数量实际上可以改进MediaPlayer不会跳过任何文件的更改
@Override
public void run() {
//record the start time
timeStart = new Date().getTime();
PlayMedia();
while (!finishedPlaying){
try {
//if a reasonable time has passed break the loop
long currentTime = (new Date().getTime() - timeStart);
long elapsedSeconds = TimeUnit.MILLISECONDS.toSeconds(currentTime);
if (elapsedSeconds > 15){
break;
}
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}