从单独的活动中停止所有MediaPlayer对象

时间:2014-05-05 05:14:07

标签: android timer android-mediaplayer

我有MediaPlayer声音在计时器结束时开始。共有5个不同的活动,共有5个不同的活动,所以没有一个会同时播放。但是,我注意到当计时器尚未完成,并且用户离开活动(或按下设备上的后退按钮)时,计数器仍然倒计时(这是好的,这是想要的),但是当时计时器结束,声音播放,没有办法阻止它。

所以我在主活动页面上创建了一个停止按钮(其中没有任何声音实际播放,它们都是从他们自己的活动开始的)。但是,如果用户离开活动以完全使用其他应用程序,他们应该能够返回应用程序主页面,并按停止按钮以停止计时器完成后播放的声音。但是我该怎么做呢?

我使用onClickListener尝试了下面的代码,但我尝试一次访问多个声音的ID,以便我可以在它们上面调用onStop()以防其中一个正在播放任何给定的时间,但我的应用程序崩溃了。下面是LogCat。谢谢你的帮助。

P.S。我不能使用SoundPool(正如一些人的建议),因为我的声音比那个类允许的声音大。)

主要活动页面上的停止按钮监听器,位于onCreate()

 btnStop = (Button)findViewById(R.id.btnStop);
        btnStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MediaPlayer mp = MediaPlayer.create(MainSelectorActivity.this,
                        R.raw.godzilla_roar|R.raw.nuclear_explode|R.raw.tsunami_wave_fx
                                |R.raw.volcano_exploding|R.raw.zombie_sound);
                mp.stop();
            }
        });
按下停止按钮后

LogCat(其中一个声音播放时):

FATAL EXCEPTION: main
    android.content.res.Resources$NotFoundException: Resource ID #0x7f050007
            at android.content.res.Resources.getValue(Resources.java:1013)
            at android.content.res.Resources.openRawResourceFd(Resources.java:975)
            at android.media.MediaPlayer.create(MediaPlayer.java:824)
            at com.azurespot.disastertimer.app.MainSelectorActivity$2.onClick(MainSelectorActivity.java:57)
            at android.view.View.performClick(View.java:4084)
            at android.view.View$PerformClick.run(View.java:16966)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
05-05 04:50:46.207    3437-3437/com.azurespot.disastertimer.app E/Trace﹕ error opening trace file: No such file or directory (2)

0 个答案:

没有答案