我的代码尝试从res / raw播放MP3文件。
代码:
FileDescriptor fd = appContext.getResources().openRawResourceFd(R.raw.ringtone)
.getFileDescriptor();
player = new MediaPlayer();
try
{
player.setAudioStreamType(AudioManager.STREAM_RING);
player.setDataSource(fd);
player.prepare();
}
catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
player = null;
return;
}
catch (IllegalStateException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
player = null;
return;
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
player = null;
return;
}
player.setLooping(true);
player.start();
日志显示:
02-21 15:18:18.360:ERROR / PlayerDriver(51):命令PLAYER_SET_DATA_SOURCE已完成,但出现错误或信息PVMFErrNotSupported 02-21 15:18:18.380:ERROR / MediaPlayer(693):错误(1,-4) 02-21 15:18:18.390:WARN / PlayerDriver(51):PVMFInfoErrorHandlingComplete
调用player.prepare()之后。
我真的没有提示。 我不会使用MediaPlayer.create(),因为我需要player.setAudioStreamType(AudioManager.STREAM_RING);
非常感谢任何帮助...
答案 0 :(得分:3)
当
MediaPlayer
对象正好时 使用新的或reset()
之后创建的 被调用,它处于空闲状态; 调用release()
后,它就是 在 End 状态。介于这两者之间 国家是生命周期MediaPlayer
对象。这是编程错误 调用诸如的方法
getCurrentPosition()
,...
, 空闲时setAudioStreamType(int)
状态。
您应该研究MediaPlayer
生命周期图并提供示例并重写您的代码。在这种情况下,您需要在 setDataSource()
之前致电setAudioStreamType()
。
旁注:在Android中,您确实需要关注生活周期事件,否则您会被咬伤。您可以编写不正确的代码,直到运行时才会知道,或者更糟糕的是,您可能会编写您认为有用的代码,并且您只会在奇怪的情况下发现它不会...屏幕方向改变,回调方法在这种情况下不一样,或其他类似情况(主页按钮等)。
答案 1 :(得分:2)
我在尝试设置音频流类型方面遇到了类似问题,我发现本指南很有帮助: API gaps: an Android MediaPlayer example