Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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,我在MediaPlayer for android中播放多个mp3文件时遇到问题…它会将所有文件一起播放并造成混乱。我希望解决方案是,它只需一次播放每个文件,然后播放其他文件。有各种MediaPlayer回调功能,如: 有各种MediaPlayer回调,使用它们的方式如下: 您可以尝试以下方法: public class MainActivity extends Activity implements MediaPlayer.OnCompletionListener { int[]

我在MediaPlayer for android中播放多个mp3文件时遇到问题…它会将所有文件一起播放并造成混乱。我希望解决方案是,它只需一次播放每个文件,然后播放其他文件。

有各种MediaPlayer回调功能,如:


有各种MediaPlayer回调,使用它们的方式如下:


您可以尝试以下方法:

public class MainActivity extends Activity implements MediaPlayer.OnCompletionListener
{
    int[] tracks = new int[3];
    int currentTrack = 0;
    private MediaPlayer mediaPlayer = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      tracks[0] = R.raw.say1;
      tracks[1] = R.raw.say2;
      tracks[2] = R.raw.say3;
      mediaPlayer = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]);
      mediaPlayer.setOnCompletionListener(this);
      mediaPlayer.start();
    }

    public void onCompletion(MediaPlayer arg0) {
      arg0.release();
      if (currentTrack < tracks.length) {
        currentTrack++;
        arg0 = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]);
        arg0.setOnCompletionListener(this);
        arg0.start();
      }
    }
}
公共类MainActivity扩展活动实现MediaPlayer.OnCompletionListener
{
int[]轨道=新int[3];
int currentTrack=0;
私有媒体播放器MediaPlayer=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
轨迹[0]=R.raw.say1;
轨迹[1]=R.raw.say2;
轨迹[2]=R.raw.say3;
mediaPlayer=mediaPlayer.create(getApplicationContext(),tracks[currentTrack]);
mediaPlayer.setOnCompletionListener(此);
mediaPlayer.start();
}
完成时的公共作废(MediaPlayer arg0){
arg0.release();
if(当前轨道<轨道长度){
currentTrack++;
arg0=MediaPlayer.create(getApplicationContext(),tracks[currentTrack]);
arg0.setOnCompletionListener(此);
arg0.start();
}
}
}

您可以尝试以下方法:

public class MainActivity extends Activity implements MediaPlayer.OnCompletionListener
{
    int[] tracks = new int[3];
    int currentTrack = 0;
    private MediaPlayer mediaPlayer = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      tracks[0] = R.raw.say1;
      tracks[1] = R.raw.say2;
      tracks[2] = R.raw.say3;
      mediaPlayer = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]);
      mediaPlayer.setOnCompletionListener(this);
      mediaPlayer.start();
    }

    public void onCompletion(MediaPlayer arg0) {
      arg0.release();
      if (currentTrack < tracks.length) {
        currentTrack++;
        arg0 = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]);
        arg0.setOnCompletionListener(this);
        arg0.start();
      }
    }
}
公共类MainActivity扩展活动实现MediaPlayer.OnCompletionListener
{
int[]轨道=新int[3];
int currentTrack=0;
私有媒体播放器MediaPlayer=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
轨迹[0]=R.raw.say1;
轨迹[1]=R.raw.say2;
轨迹[2]=R.raw.say3;
mediaPlayer=mediaPlayer.create(getApplicationContext(),tracks[currentTrack]);
mediaPlayer.setOnCompletionListener(此);
mediaPlayer.start();
}
完成时的公共作废(MediaPlayer arg0){
arg0.release();
if(当前轨道<轨道长度){
currentTrack++;
arg0=MediaPlayer.create(getApplicationContext(),tracks[currentTrack]);
arg0.setOnCompletionListener(此);
arg0.start();
}
}
}

我是通过以下代码实现的:

private ArrayList<MediaPlayer> mPlayerList = new ArrayList<MediaPlayer>();
public void playSound4FileList(ArrayList<String> fileList) 
{
    mPlayerList.clear();
    for (String fileName : fileList)
    {
        try {
            MediaPlayer mPlayerT = new MediaPlayer();

            AssetFileDescriptor descriptor = context.getAssets().openFd(fileName);
            mPlayerT.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
            descriptor.close();

            mPlayerT.prepare();
            mPlayerT.setVolume(1f, 1f);
            mPlayerT.setLooping(false);

            mPlayerList.add(mPlayerT);

        } catch (Exception e) {
        }

    }
    for (int i=0; i<mPlayerList.size()-1; i++) //Do not include last element
    {
        mPlayerList.get(i).setNextMediaPlayer(mPlayerList.get(i+1));

    }

    mPlayerList.get(0).start();
}
private ArrayList mPlayerList=new ArrayList();
public void playSound4FileList(ArrayList文件列表)
{
mPlayerList.clear();
用于(字符串文件名:文件列表)
{
试一试{
MediaPlayer mPlayerT=新MediaPlayer();
AssetFileDescriptor描述符=context.getAssets().openFd(文件名);
setDataSource(descriptor.getFileDescriptor(),descriptor.getStartOffset(),descriptor.getLength());
descriptor.close();
mPlayerT.prepare();
mPlayerT.setVolume(1f,1f);
mPlayerT.setLooping(false);
mPlayerList.add(mPlayerT);
}捕获(例外e){
}
}

对于(int i=0;i我是通过以下代码实现的:

private ArrayList<MediaPlayer> mPlayerList = new ArrayList<MediaPlayer>();
public void playSound4FileList(ArrayList<String> fileList) 
{
    mPlayerList.clear();
    for (String fileName : fileList)
    {
        try {
            MediaPlayer mPlayerT = new MediaPlayer();

            AssetFileDescriptor descriptor = context.getAssets().openFd(fileName);
            mPlayerT.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
            descriptor.close();

            mPlayerT.prepare();
            mPlayerT.setVolume(1f, 1f);
            mPlayerT.setLooping(false);

            mPlayerList.add(mPlayerT);

        } catch (Exception e) {
        }

    }
    for (int i=0; i<mPlayerList.size()-1; i++) //Do not include last element
    {
        mPlayerList.get(i).setNextMediaPlayer(mPlayerList.get(i+1));

    }

    mPlayerList.get(0).start();
}
private ArrayList mPlayerList=new ArrayList();
public void playSound4FileList(ArrayList文件列表)
{
mPlayerList.clear();
用于(字符串文件名:文件列表)
{
试一试{
MediaPlayer mPlayerT=新MediaPlayer();
AssetFileDescriptor描述符=context.getAssets().openFd(文件名);
setDataSource(descriptor.getFileDescriptor(),descriptor.getStartOffset(),descriptor.getLength());
descriptor.close();
mPlayerT.prepare();
mPlayerT.setVolume(1f,1f);
mPlayerT.setLooping(false);
mPlayerList.add(mPlayerT);
}捕获(例外e){
}
}

对于(int i=0;iString PATH_TO_FILE=“/sdcard/my_downloads/”+filenum+“.mp3”;mediaPlayer=new mediaPlayer();尝试{mediaPlayer.setDataSource(PATH_TO_FILE);mediaPlayer.prepare();mediaPlayer.start();mediaPlayer.setOnCompletionListener(new OnCompletionListener(){public void onCompletion(mediaPlayer mp){/TODO字符串路径=“/sdcard/my_downloads/“+filenum+”.mp3;mediaPlayer=new mediaPlayer();尝试{mediaPlayer.setDataSource(path);mediaPlayer.prepare();mediaPlayer.start();}捕获(异常e){//TODO:handle Exception}filenum++;};我实现了这一点,但…它工作不正常…它只播放前两个文件我有相同的,它只播放前两个文件。您似乎必须向theMediaPlayer添加一个oncompletionlistener。不知道如何…但请注意,您可能会听到两次mp3:/String PATH_to_FILE=“/sdcard/my_downloads/”+filenum+。mp3“mediaPlayer=new mediaPlayer();尝试{mediaPlayer.setDataSource(路径到文件);mediaPlayer.prepare();mediaPlayer.start();mediaPlayer.setOnCompletionListener(新的OnCompletionListener(){public void onCompletion(mediaPlayer mp){//TODO字符串路径=“/sdcard/my_downloads/”+filenum+”.mp3”;mediaPlayer=new mediaPlayer();尝试{mediaPlayer.setDataSource(path);mediaPlayer.prepare();mediaPlayer.start();}catch(异常e){//TODO:handle Exception}filenum++;});我实现了这一点,但…它工作不正常…它只播放前两个文件我有相同的,它只播放前两个文件。你似乎必须为theMediaPlayer添加一个oncompletionlistener。不知道怎么做…但请注意,你可能会听到两次MP3:/Call需要API级别16:android.media.MediaPlayer#setNextMediaPlayer!这可以工作,但c占用了太多内存!!小心…调用需要API级别16:android.media.MediaPlayer#setNextMediaPlayer!这可以工作,但会占用太多内存!!小心…这只执行前两个音频文件,第三个不播放。为什么会发生这种情况,你有什么解决办法吗?这只执行前两个音频文件,第三个不执行不是玩。为什么会发生这种情况,你有什么解决办法吗?使用exoPl