protected MediaPlayer _mediaPlayer;
protected void playFromResource(int resId)
{
if (_mediaPlayer != null)
{
_mediaPlayer.stop();
_mediaPlayer.release();
}
_mediaPlayer = MediaPlayer.create(this, resId);
_mediaPlayer.start();
}
此代码曾用于在模拟器和设备上正常工作。从一段时间以来(我认为自从我更新到ADT r10以来)它只适用于设备。在模拟器上没有声音,当应用程序通过on _mediaPlayer.release()
时(第二次调用该函数)应用程序冻结。我通过将stop()
和release()
替换为reset()
来保持应用程序崩溃,但它无法解决主要问题:模拟器上没有声音。
日志文件在调用start()
之后显示了一堆这些(仅在模拟器上)
03-09 19:14:30.716:WARN / AudioTrack(34):obtainBuffer超时(是 CPU挂钩?)0x1afb8 user = 00001e00,server = 00000600
任何线索????
答案 0 :(得分:11)
我的MacBook Pro出现了这个问题,发现我必须在启动模拟器之前关闭蓝牙。
答案 1 :(得分:8)
我在mac os上也看到了这个问题。在我的情况下,当您为模拟器启用“快照”时会发生这种情况
http://code.google.com/p/android/issues/detail?id=14953
您必须删除模拟器并创建一个没有启用“快照”的新模拟器。
答案 2 :(得分:4)
看起来问题只出在我的电脑上。我只是在另一台计算机上试用它,它工作正常。当我升级到ADT的r10时,我遇到了一些问题。也许我的开发设置有问题。
答案 3 :(得分:0)
请务必阅读MediaPlayer状态图,并在关闭MediaPlayer对象时执行所有请求的操作;如果您没有停止,重置并重新发布它,下次您尝试使用它时,它将处于不连贯状态,因此您无法启动它。
详情: http://developer.android.com/reference/android/media/MediaPlayer.html
答案 4 :(得分:0)
对于我来说,手动启动仿真器很有帮助。
emulator
程序可以在android-sdk/tools/
中找到。
因此,最终命令将类似于:
android-sdk/tools/emulator -avd my_cool_emulator_name