【发布时间】: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