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

标签 android media-player

我是 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/

相关文章:

java - IllegalStateException:无法在父级或祖先上下文中找到 android:onClick 属性在 View 类上定义的方法

android - Androids MediaPlayer onErrorListener MEDIA_ERROR_SERVER_DIED出现问题

Android - 如何判断 MediaPlayer 何时缓冲

android - 播放Mediaplayer一定时间

c# - 我的 Windows 窗体项目上的 Media Player 经典库

java - 如何使用 PackageManager 检查某个应用程序是否在方法中被禁用

java - onCreateOptionsMenu 未在 Fragment 类中调用

android - 将 SearchView 与 AppCompat 一起使用时出现空指针异常

java - Android - 复选框在 ListView 中每 10 个重复一次

iphone - MPNowPlayingInfoCenter 与 AVAudioPlayer 兼容吗?