0

我正在开发一个应用程序。我需要在通话时播放音乐。但是我面临的问题是,每当我尝试在通话中播放音乐时,它的声音都没有没有通话时那么响亮。有什么方法可以在通话时控制背景音乐。通话时音乐音量变小,但通话结束后音量变大。

final AudioManager mAudioManager = (AudioManager) ctx
                    .getSystemService(AUDIO_SERVICE);
            final int originalVolume = mAudioManager
                    .getStreamVolume(AudioManager.STREAM_MUSIC);
            mAudioManager
                    .setStreamVolume(
                            AudioManager.STREAM_MUSIC,
                            mAudioManager
                                    .getStreamMaxVolume(AudioManager.STREAM_MUSIC),
                            0);
            mp = new MediaPlayer();


            mp.setAudioStreamType(AudioManager.STREAM_MUSIC);

            mAudioManager.setMode(AudioManager.MODE_NORMAL);

            Class audioSystemClass = Class
                    .forName("android.media.AudioSystem");
            Method setForceUse = audioSystemClass.getMethod(
                    "setForceUse", int.class, int.class);
            // First 1 == FOR_MEDIA, second 1 == FORCE_SPEAKER. To go
            // back to the default
            // behavior, use FORCE_NONE (0).
            setForceUse.invoke(null, 1, 1);

这是我的代码。

4

2 回答 2

1

我看到您正在尝试使用我在另一个问题的答案中发布的“强制音乐流到扬声器”的方法。

问题是在语音通话期间,音乐流将跟随语音通话的路由并忽略FOR_MEDIA强制标志。因此,您认为较低的音量很可能是从听筒而不是扬声器播放音乐的结果。

据我所知,在通话过程中,如果不将语音呼叫路由到扬声器(即使用setSpeakerPhoneOn),就无法将音乐路由到扬声器。

于 2013-07-03T17:19:34.953 回答
0

根据您的手机制造商/运营商实施 Android AudioPolicyService 的方式,某些实施会在 MODE_IN_CALL/MODE_IN_COMMUNICATION 处于会话状态时降低 STREAM_MUSIC 音量。

我没有尝试过,但一个可能可行的解决方案是使用 STREAM_VOICE_CALL 而不是 STREAM_MUSIC。然后,您的音频流应该与通话中的音频流一起播放就好了。

于 2013-08-23T20:13:36.337 回答