【问题标题】:Android MediaPlayer will not play sound on newer APIsAndroid MediaPlayer 不会在较新的 API 上播放声音
【发布时间】:2012-07-24 04:20:42
【问题描述】:

我一直在使用此代码,它在 Froyo 和 Gingerbread 上播放的声音很好(我假设 Honeycomb 以及我的朋友都使用过它):

MediaPlayer mp = MediaPlayer.create(this, R.raw.click);

Button clicker = (Button) findViewById(R.id.clicker);

clicker.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v){

            mp.start();

        }
    });

我使用的音频是 WAV 格式。我已经检查过它以确保它没有损坏并且很好。此代码和声音文件在 Gingerbread 上仍然可以正常运行。

在 Ice Cream Sandwich 和 JellyBean 设备(分别是 Galaxy nexus 和 nexus 7)上,此代码不起作用。不播放声音。 logcat 中没有任何内容。我在互联网上搜索并询问了我的朋友们的想法,但我无法提出任何想法。

提前感谢您的宝贵时间!

【问题讨论】:

  • 我认为你应该在你的代码中加入更多的调试语句。为什么不将调用包装在 IllegalStateException 中

标签: java android audio android-mediaplayer


【解决方案1】:

将调用包装在 IllegalStateException 中,通过调试器运行它,看看你得到了什么。还设置一个布尔值 isPlaying=mp.isPlaying();并检查其值。还可以在开始之前尝试 mp.reset() 并查看它是否有效。

另见http://developer.android.com/reference/android/media/MediaPlayer.html#setOnErrorListener%28android.media.MediaPlayer.OnErrorListener%29

继续并实现 MediaPlayer.OnErrorListener 并向媒体播放器注册该方法。看看你得到了什么错误。

【讨论】:

  • 我似乎遇到了非法状态异常错误 (-38, 0)。谢谢,我现在离解决这个问题又近了一步!顺便说一句,mp.reset() 没有帮助。
  • 能够通过重新排列代码和使用 prepare() 来解决它。再次感谢您的所有帮助!
  • @RobS.,你是如何使用 prepare() 的? prepare() 由 create() 自动调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多