3

我想在onPause()调用我的 Activity 时播放声音。为此,我使用以下代码:

@Override
public void onPause()
{
    super.onPause();

    MediaPlayer player = MediaPlayer.create(this, Settings.System.DEFAULT_RINGTONE_URI);
    player.setLooping(false);
    player.start();
}

这很好用,但声音会一直播放下去。我尝试添加一个OnCompletionListener,但这没有帮助(Listener从未调用过)。

我知道我不会在任何地方打电话player.stop()player.release()但我什至不知道在哪里打电话。

我现在的问题是:我怎样才能让声音只播放一次?有没有办法在应用程序进入后台之前等待媒体播放器完成?

4

4 回答 4

2

好的,我找到了解决方案。

问题是,我正在使用Settings.System.DEFAULT_RINGTONE_URI,它显然永远不会停止播放。

改用Settings.System.DEFAULT_NOTIFICATION_URI解决了这个问题。

于 2013-05-08T08:58:54.240 回答
0

你可以试试这个(如果我理解正确的话)

public boolean test=false; // At begin

public void onPause()
{
    super.onPause();
if(!test){
    MediaPlayer player = MediaPlayer.create(this, Settings.System.DEFAULT_RINGTONE_URI);
    player.setLooping(false);
    player.start();
    test=true;
}
}

也许我不明白你想说什么。如果您向我们解释更多一点,也许我们可以为您提供帮助:)

于 2013-05-08T08:44:21.430 回答
0

我还没有这样做,但我想你可以检查一下这个

       player.setLooping(false);
       player.setOnCompletionListener(new OnCompletionListener() 
        {
            @Override
            public void onCompletion(MediaPlayer mp)
            {
                player.stop();
                player.release();
            }
        });
于 2013-05-08T08:45:30.870 回答
-1

不知道为什么它会循环播放,但您可以使用 MediaElement 播放声音吗?您可以使用方法 MediaEnded 识别媒体何时结束,然后调用 stop 方法停止播放音频

于 2013-05-08T08:43:14.560 回答