【问题标题】:Android MediaPlayer.Create() returns nullAndroid MediaPlayer.Create() 返回 null
【发布时间】:2022-01-30 18:28:11
【问题描述】:

我正在开发一个播放一些声音的 Android 应用程序。为此,我正在创建一个 MediaPlayer 对象。下面是代码:

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

对于 Android 2.3.3(API 级别 10),这里的 mp 为空,我尝试使用其他版本的 Android(2.1、2.2 等)它工作正常。但是,对于 Android 2.3.3(API 级别 10),MediaPlayer.create() 调用返回 null。

声音文件 (testSound.wav) 是一个 wav 文件。我尝试解析 wav 文件以查看它是否已损坏。看起来刚刚好。 另外,我可以使用 Windows Media Player 播放这个声音文件。

这是 testSound.wav 文件:testSound.wav 以下是详细代码:

public MediaPlayer mp;

// OnCreate() funciton
mp = MediaPlayer.create(this, R.raw.testSound);
if(mp == null)   // mp is null for Android 2.3.3 on real device and on AVD both
  {
  Toast msg = Toast.makeText(getApplicationContext(), "Could not play sound",         
  Toast.LENGTH_LONG);
  msg.show();
  }

//SetMediaFileToPlay() is called on Click event of button
void SetMediaFileToPlay() 
{       
    AssetFileDescriptor afd;     
    Resources res = getResources();
    Log.d("In SetMediaFileToPlay %s", g_strFocusedImage.toString());
    switch (g_strFocusedImage)
    {
      case RESID_ALPHA1:
      afd = res.openRawResourceFd(R.raw.ik);
      if(mp != null)
      {
        mp.reset();
        mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),      
        afd.getLength());
      }  
      break;
      .........  //other cases
   }

 if(mp != null)
  {
    mp.prepare();
    mp.start();
  }

}

请帮忙。谢谢。

【问题讨论】:

  • 尝试创建新的虚拟机。如果它不起作用,请向我们提供更多代码。
  • 您好 Vasily,该问题在 Android 2.3.3 真实设备和 AVD 上都可以重现。但是它在 Android 2.2 真实设备和 AVD 上运行良好。我已经用代码更新了我的问题。谢谢。
  • 'SetMediaFileToPlay' 是否工作(假设 'if(mp != null){...}' 被执行)?您是否尝试过其他文件?
  • SetMediaFileToPlay() 被执行,并且在 Android 2.3.3 上包含 testSound.wav 的一组 10 到 12 个文件失败(mp 为空)。这组文件在 Android 2.2 上运行良好(mp 不为空)。但是,我从我的机器上播放了一个随机的歌曲文件。播放成功。
  • 尝试从 testsound.wav 更改为 testsound.mp3。

标签: android wav android-mediaplayer


【解决方案1】:

您的文件使用 WAVE 8,000Hz MP3 8 kbit/s 格式,而 android 仅支持 8 位和 16 位线性 PCM:http://developer.android.com/guide/appendix/media-formats.html。

尝试修复您的文件。

【讨论】:

  • #Vasily:抱歉回复晚了。实际上,我没有时间验证您的观察/解决方案。谢谢,我可以看到我使用的文件不是线性 PCM 文件。谢谢。
  • 如何修复我的文件?非常感谢!
  • @RuchirBaronia 使用 Audacity 等免费音频编辑器。我相信VLC也能胜任vlchelp.com/convert-audio-format
  • @VasilySochinsky 好的,太好了!谢谢你的建议,我会用 audocity 试试。你认为这可能是this 问题的原因吗?基本上,音频在我的手机上工作,但不是我的模拟器?非常感谢!
  • @VasilySochinsky 另外,我已经下载了 audocity。你建议使用.wav吗?
【解决方案2】:

它可能会返回null,因为设备不支持播放音频,即watch。

要检查设备是否支持 MediaPlayer,您可以对 MediaPlayer.create() 进行空值检查

我在谷歌上找到了它santa-tracker app

【讨论】:

    【解决方案3】:

    null 似乎在传达 某事 出了问题。由于 Google 将此显示为“android mediaplayer.create() 返回 null”的第一个结果,因此我的建议是检查您的代码并检查

    • 如果您的设备支持 Vasily 指示的格式
    • 如果您传入的文件确实存在或已经创建

    在我的例子中,我在将它传递给Mediaplayer.create 之前创建了一个空文件。这在我的模拟设备上运行良好,但在我的个人设备上崩溃了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-22
      • 2012-05-28
      • 2014-12-05
      • 2021-07-07
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多