[英]Sound file won't play when using MediaPlayer
我正在尝试为我的类soundBuzzer()
创建一个方法,该方法在被调用时会播放包含2s蜂鸣器声音的mp3文件。 我已经搜索了很长时间,但是我尝试过的任何方法都无法正常工作。 我发现最不会在代码中产生语法错误的是:
// function to play buzzer_2s.mp3
public void soundBuzzer() {
MediaPlayer mp = MediaPlayer.create(null, R.raw.buzzer_2s);
mp.start();
}
有人可以告诉我怎么了。 当我运行上述方法时,我的应用程序崩溃了。 我尝试查看catlog中的错误,但对我来说它们没有意义:
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();
}
如果不确定上下文是什么,则可能需要阅读一些内容。 首先,在Android中取消上下文神秘化可能是一个不错的选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.