MediaPlayer从/ res / raw播放下一首曲目

时间:2012-06-19 11:47:09

标签: android media-player

我正在制作摇篮曲app.Initially在我的/ res / raw文件夹中有两首曲目。 在完成第一首曲目后,我希望它能够播放下一曲目。 我使用onCompletionListener做了这个。但它显示强制关闭错误。 下面是我的代码。 那么有人能告诉我该怎么做吗?

public class PlayRandom extends Activity implements OnCompletionListener{
        MediaPlayer mp;
    int rnum;
    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playrandom);
                mp.setOnCompletionListener(this);
        mp = MediaPlayer.create(this, R.raw.lullaby1);
        mp.start();     
    }
    @Override
    public void finish() {
        // TODO Auto-generated method stub
        super.finish();
        mp.stop();
    }
    public void onCompletion(MediaPlayer mp) {
        // TODO Auto-generated method stub
        File pdfFile = new File("res/raw/lullaby2.mp3");
        Uri path = Uri.fromFile(pdfFile);
        mp.stop();
        try{
            mp.setDataSource(getApplicationContext(), path);
        mp.prepare();
        mp.start();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }
}

我尝试了这个,但仍然无法正常工作。 我和OnClickListener中有一些错误。

public class PlayRandom extends Activity implements OnCompletionListener{
    MediaPlayer mp;
int rnum;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.playrandom);
            mp.setOnCompletionListener(this);
    mp = MediaPlayer.create(this, R.raw.lullaby1);
    mp.start();     
}
@Override
public void finish() {
    // TODO Auto-generated method stub
    super.finish();
    mp.stop();
}
public void onCompletion(MediaPlayer mp) {
    // TODO Auto-generated method stub
    Toast.makeText(this,"Yuppieee!!", Toast.LENGTH_SHORT);
}

}

1 个答案:

答案 0 :(得分:2)

使用AssetFileDescriptor从原始文件夹播放文件:

   AssetFileDescriptor afdes = getAssets().openRawResourceFd(R.raw.lullaby2);
    mp.reset();
    mp.setDataSource(afdes.getFileDescriptor(), afdes.getStartOffset(), afdes.getLength());
    mp.prepare();
    mp.start();