gpt4 book ai didi

android - MediaPlayer、原始资源、停止和启动问题

转载 作者:IT老高 更新时间:2023-10-28 22:16:14 26 4
gpt4 key购买 nike

我是 Android 开发新手,有一个疑问/问题。

我正在使用 MediaPlayer 类来重现一些声音/音乐。我正在玩原始资源 (res/raw),看起来很简单。

要播放原始资源,必须像这样初始化 MediaPlayer:


MediaPlayer mp = MediaPlayer.create(appContext, R.raw.song);
mp.start();

直到这里没有问题。播放声音,一切正常。当我想向我的应用程序添加更多选项时,我的问题出现了。特别是当我添加“停止”按钮/选项时。

基本上,我想做的是......当我按下“停止”时,音乐停止。当我按下“开始”时,歌曲/声音重新开始。 (非常基本!)

要停止媒体播放器,您只需调用 stop()。但要再次播放声音,必须重置媒体播放器并做好准备。


mp.reset();
mp.setDataSource(params);
mp.prepare();

问题是 setDataSource() 方法只接受文件路径、Content Provider URI、流媒体 URL 路径或文件描述符作为参数。

所以,由于这个方法不接受资源标识符,我不知道如何设置数据源以便调用prepare()。另外,我不明白为什么不能使用Resouce标识符来设置数据源,但是初始化MediaPlayer的时候可以使用资源标识符。

我想我错过了一些东西。我想知道我是否在混合概念,并且方法 stop() 不必在“停止”按钮中调用。有什么帮助吗?

提前致谢!!!

最佳答案

这是我使用单个 MediaPlayer 加载多个资源的操作:

/**
* Play a sample with the Android MediaPLayer.
*
* @param resid Resource ID if the sample to play.
*/
private void playSample(int resid)
{
AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);

try
{
mediaPlayer.reset();
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
mediaPlayer.prepare();
mediaPlayer.start();
afd.close();
}
catch (IllegalArgumentException e)
{
Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e);
}
catch (IllegalStateException e)
{
Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e);
}
catch (IOException e)
{
Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e);
}

mediaPlay 是一个成员变量,它在类的其他点创建和释放。这可能不是最好的方法(我自己是 Android 新手),但它似乎有效。请注意,在 mediaPlayer 完成播放之前,代码可能会落到方法的底部。如果你需要播放一系列资源,你还是需要处理这种情况。

关于android - MediaPlayer、原始资源、停止和启动问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2969242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com