【问题标题】:Android Mediaplayer Selecttrack method failsAndroid Mediaplayer Selecttrack 方法失败
【发布时间】:2016-07-26 02:55:05
【问题描述】:

我在 Android 上使用媒体播放器功能。我基本上在 raw 文件夹中有歌曲,我只想换一首新曲目,但它失败了。播放一个音乐文件,然后我在播放音乐之后或期间按一个按钮以跳到随机曲目,但它失败了。

当前代码

mediaplayer.stop();
try {
        mediaplayer.prepareAysn();
        mediaPlayer.selectTrack(randomtrack_num - 1);

    }
    catch(Exception e){}
mediaplayer.start();

我收到的错误:

  • MediaPlayer:在状态 64 中开始调用

  • MediaPlayer:错误 (-38, 0)

  • MediaPlayer:错误 (-38,0)

我在没有 mediaplayer.stop() 的情况下尝试了这个,但最后仍然包含 mediaplayer.start(),它只会再次重播相同的曲目。

我错过了什么吗? 请告诉我。

第二种方法 阅读文档后,我意识到这只能在准备好的状态下完成,我认为在我的第二种方法中它应该可以工作,但事实并非如此。

  mediaPlayer.stop();

    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){

        @Override
        public void onPrepared(MediaPlayer mp) {

          try{
               mp.selectTrack(randomtrack_num - 1);

              }catch(Exception e){}

            mp.start();

        }
    });
    mediaPlayer.prepareAsync();

我收到此错误:/MediaPlayer: 应该已经设置了字幕控制器 基本上相同的曲目再次播放,它不会进入所选曲目。

【问题讨论】:

    标签: java android


    【解决方案1】:

    您在错误状态下调用mediaplayer.start()。首先阅读此文档:

    https://developer.android.com/reference/android/media/MediaPlayer.html

    您将更好地了解正确的实施方式。

    已编辑:

       String[] url ; // initiliaze your URL array here
       MediaPlayer myMediaPlayer = new MediaPlayer();
       myMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
       try { 
           myMediaPlayer.setDataSource(url[0]);
           myMediaPlayer.prepareAsync(); // might take long! (for buffering, etc)
       } catch (IOException e) {
           Toast.makeText(this, "mp3 not found", Toast.LENGTH_SHORT).show();
           e.printStackTrace();
       } 
    
       //mp3 will be started after completion of preparing... 
       myMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    
           @Override 
           public void onPrepared(MediaPlayer player) {
               player.start();
           } 
    
       }); 
    

    完成后播放不同的曲目

    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mp) 
     { 
    
        myMediaPlayer.reset(); 
       /* load the new source */ 
       myMediaPlayer.setDataSource(url[position]);//select the path according to your need 
       /* Prepare the mediaplayer */ 
       myMediaPlayer.prepareAsync();
    

    }

    【讨论】:

    • 我添加了 mediaplayer.prepareAysnc();在 try and catch 字段内。它仍然没有进入另一个轨道。但是我确实收到了这个错误,“E/MediaPlayer:应该已经设置了字幕控制器”
    • 我使用 setOnPreparedListener() 进行了第二次尝试,但仍然无法解决此问题。
    • 上述答案中的 .selecttrack() 方法在哪里?
    • 我想知道你想达到什么目标,我会更好地帮助你。
    • 如果您有一个包含多个曲目的数据源,并且您想要切换到下一个曲目,或者假设您想要随机播放。在 onCompletionListener 中执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多