Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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
Android MediaPlayer随机跳过播放某些文件_Android - Fatal编程技术网

Android MediaPlayer随机跳过播放某些文件

Android MediaPlayer随机跳过播放某些文件,android,Android,我有一个多线程应用程序,其中主线程启动两个线程: 生成请求线程 队列侦听器线程 MakeRequest线程每秒查询LAN上的打印机以请求一些数据并对其执行一些计算,然后将其提供给第二个线程正在侦听的队列。一旦队列中的数据可用,QueueListener线程就会从队列中取出一条记录,并启动另一个线程,即MediaPlayer线程。该线程负责播放7到8个文件,具体取决于接收到的字符串。为此,我使用以下代码 MediaPlayer mp = MediaPlayer.create(context, U

我有一个多线程应用程序,其中主线程启动两个线程:

生成请求线程 队列侦听器线程 MakeRequest线程每秒查询LAN上的打印机以请求一些数据并对其执行一些计算,然后将其提供给第二个线程正在侦听的队列。一旦队列中的数据可用,QueueListener线程就会从队列中取出一条记录,并启动另一个线程,即MediaPlayer线程。该线程负责播放7到8个文件,具体取决于接收到的字符串。为此,我使用以下代码

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

    }

}