java - 使用 MediaPlayer 时无法播放声音文件

标签 java android

我正在尝试为我的类 soundBuzzer() 创建一个方法,该方法在调用时会播放包含 2 秒蜂鸣器声音的 mp3 文件。我已经寻找了很长时间,但我尝试过的任何方法都不起作用。我能找到的最接近的不会在代码中生成语法错误的东西是:

// function to play buzzer_2s.mp3
public void soundBuzzer() {
    MediaPlayer mp = MediaPlayer.create(null, R.raw.buzzer_2s);
    mp.start();

}

有人可以告诉我出了什么问题吗?当我运行上述方法时,我的应用程序崩溃了。我尝试查看目录中的错误,但它们对我来说没有意义:

12-26 14:50:57.491: E/AndroidRuntime(16520): FATAL EXCEPTION: main
12-26 14:50:57.491: E/AndroidRuntime(16520): java.lang.NullPointerException
12-26 14:50:57.491: E/AndroidRuntime(16520):    at android.media.MediaPlayer.create(MediaPlayer.java:731)
12-26 14:50:57.491: E/AndroidRuntime(16520):    at com.example.ultimatescoreclock.ClockTimer.soundBuzzer(ClockTimer.java:108)
12-26 14:50:57.491: E/AndroidRuntime(16520):    at com.example.ultimatescoreclock.ClockTimer.onFinish(ClockTimer.java:40)
12-26 14:50:57.491: E/AndroidRuntime(16520):    at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:118)
12-26 14:50:57.491: E/AndroidRuntime(16520):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 14:50:57.491: E/AndroidRuntime(16520):    at android.os.Looper.loop(Looper.java:137)
12-26 14:50:57.491: E/AndroidRuntime(16520):    at android.app.ActivityThread.main(ActivityThread.java:4424)
12-26 14:50:57.491: E/AndroidRuntime(16520):    at java.lang.reflect.Method.invokeNative(Native Method)
12-26 14:50:57.491: E/AndroidRuntime(16520):    at java.lang.reflect.Method.invoke(Method.java:511)
12-26 14:50:57.491: E/AndroidRuntime(16520):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
12-26 14:50:57.491: E/AndroidRuntime(16520):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
12-26 14:50:57.491: E/AndroidRuntime(16520):    at dalvik.system.NativeStart.main(Native Method)`

最佳答案

您需要为 MediaPlayer.create() 提供一个 Context 而不是 null。如果您从 Activity 类执行此操作,则很简单:

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

如果您从不同的类调用它,则需要以某种方式将上下文传递给 soundBuzzer()

public void soundBuzzer(Context context)
{
    MediaPlayer mp = MediaPlayer.create(context, R.raw.buzzer2s);
    mp.start();
}

如果您不确定上下文是什么,您可能需要阅读一下。 Demystifying Context in Android可能是一个很好的开始。

关于java - 使用 MediaPlayer 时无法播放声音文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14045540/

相关文章:

java - 意外错误(类型=未找到,状态=404)

android - 以编程方式打开(溢出)菜单

java - 吉他调音的频率检测

java - 无法使用 java.io.IOException : setDataSourceFD failed. : status=0x80000000 in 2. 3.3 android 平板电脑创建媒体播放器

android - 有什么方法可以自定义消息 "This app won' t 运行,除非您更新 Google Play 服务”或根据用户选择跳过消息

java - 在云被阻止的环境中使用 azure cosmos db 模拟器进行开发

java - 用 Java 创建可执行安装程序

java - 从 ftp 服务器下载文件

Android应用程序显示在主屏幕后面,为什么?

java - 在 intellij 的 GWT 配置中更改 Super Dev Mode 端口参数