Android MediaPlayer.Create() 返回 null。

7

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

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

在Android 2.3.3(API Level 10)中,mp为null。我尝试过其他版本的Android(2.1、2.2等),它能正常运行。但是在Android 2.3.3(API Level 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 Sochinsky
你好Vasily,这个问题可以在Android 2.3.3真机和AVD上复现。但是在Android 2.2真机和AVD上运行良好。我已经更新了我的问题并附上了代码。谢谢。 - user1319278
“SetMediaFileToPlay” 能用吗(假设执行了 “if(mp != null){...}”)?你试过另一个文件吗? - Vasily Sochinsky
SetMediaFileToPlay()被执行时,在Android 2.3.3上,包括testSound.wav在内的一组10到12个文件失败了(mp为null)。但是,在Android 2.2上,这组文件可以正常工作(mp不为null)。 然而,我从我的机器中播放了一个随机歌曲文件。它成功地播放了。 - user1319278
尝试将文件从 testsound.wav 更改为 testsound.mp3。 - Vasily Sochinsky
嗯,我仍然相信问题在于你的文件,因为MediaPlayer可以播放16位WAVE文件,但只有在格式类型为PCM而不是扩展格式类型时才能播放。 - Vasily Sochinsky
3个回答

10

我该如何修复我的文件?非常感谢! - Ruchir Baronia
@RuchirBaronia 使用免费的音频编辑器,如Audacity。我相信VLC也可以完成这项工作https://www.vlchelp.com/convert-audio-format/。 - Vasily Sochinsky
@VasilySochinsky 好的,太棒了!感谢您的建议,我会尝试使用Audacity。您认为这可能是导致这个问题的原因吗?基本上,音频在我的手机上可以工作,但在模拟器上却不能?非常感谢! - Ruchir Baronia
@VasilySochinsky 另外,我已经下载了Audacity。你建议使用.wav格式吗? - Ruchir Baronia
@RuchirBaronia 这取决于您的需求,但是 .wav 应该可以。 - Vasily Sochinsky
显示剩余2条评论

0

由于设备不支持播放音频,它可能会返回 null,例如 watch

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

我在 Google 上找到了这个 圣诞老人跟踪器应用程序


0

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

  • 您的设备是否支持 Vasily 指示的格式
  • 您传递的文件是否实际存在或已经创建

在我的情况下,在将其传递给 Mediaplayer.create 之前,我已经创建了一个空文件。这在模拟设备上运行良好,但在我的个人设备上崩溃了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接