Android MediaPlayer.Create()返回null

时间:2012-08-04 19:37:50

标签: android wav android-mediaplayer

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

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

对于Android 2.3.3(API级别10),这里的mp为null,我尝试使用其他版本的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();
  }

}

请帮忙。谢谢。

3 个答案:

答案 0 :(得分:6)

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

尝试修复您的文件。

答案 1 :(得分:0)

由于设备不支持播放音频,即null,因此可能返回watch

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

我在Google santa-tracker app

上找到了它

答案 2 :(得分:0)

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

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

就我而言,在将文件传递给Mediaplayer.create之前,我已经创建了一个空文件。在我的模拟设备上,此方法运行良好,但在个人设备上崩溃了。