2012-11-27 59 views
1

我试图播放媒体播放器中的音频文件,一旦文件完全播放,然后从特定文件的某个位置循环并继续重复循环。在Android媒体播放器中循环播放

我已经看到一个方法seekTo()从一个特定的点播放,但我很困惑如何首先播放完整的文件,然后使用seekTo函数。

任何帮助,将不胜感激。 Sudo代码将会有所帮助。

添加代码:

这里是我曾尝试的代码,但它留下约一秒钟差距再次播放声音之前。

public void playBackgroundMusic() { 
    AssetFileDescriptor descriptor = null; 
    try { 
     descriptor = context.getAssets().openFd("music/" + FILE_NAME); 
     try { 
      this.mediaPlayer.setDataSource(descriptor.getFileDescriptor(), 
        descriptor.getStartOffset(), descriptor.getLength()); 
     } catch (IllegalStateException e) { 
      this.mediaPlayer.reset(); 
      this.mediaPlayer.setDataSource(descriptor.getFileDescriptor(), 
        descriptor.getStartOffset(), descriptor.getLength()); 
     } 
     if (listener != null) { 
      this.mediaPlayer.setOnCompletionListener(listener); 
     } 
     this.mediaPlayer.setOnErrorListener(new OnErrorListener() { 

      @Override 
      public boolean onError(MediaPlayer arg0, int arg1, int arg2) { 
       // TODO Auto-generated method stub 
       return false; 
      } 
     }); 
     this.mediaPlayer.setLooping(false); 
     this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     this.mediaPlayer.prepare(); 
     this.mediaPlayer.start(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (descriptor != null) { 
       descriptor.close(); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

private OnCompletionListener listener = new OnCompletionListener() { 

    @Override 
    public void onCompletion(MediaPlayer mp) { 
     // TODO Auto-generated method stub 
     mp.seekTo(DEFAULT_LOOPING_TIME); 
     mp.start(); 
    } 
}; 
+0

您使用来执行此任务的API。你可以张贴你试过的东西.. –

+0

@TechEnd我正在使用API​​ 8(Android 2.2)来执行此任务。我还没有开始实施,但无法在我的脑海中实现。 –

+0

我的意思是你使用AudioRecord API或MediaPlayer Android API?我不知道版本问题。 –

回答

0
  • 从一开始播放的媒体。
  • 使用onPlaybackFinished事件,或类似的再次启动媒体 东西,这次与seekTo()方法
+0

试过这个,但是当声音结束时,它会在1秒钟之间没有声音之间留下凹凸,然后开始重复。任何解决方案?我需要它平稳无阻。 –

+0

我已经添加了关于这个问题的代码,如果你可以看看它。 –