在通话时专注于背景音乐

时间:2013-07-03 16:08:55

标签: android call android-audiomanager

我正在开发一款应用。我在打电话时需要播放音乐。但我面临的问题是,每当我尝试在通话中播放音乐时,它就不会像没有通话时那么大声。 在通话中有没有办法控制背景音乐。我在通话时音乐音量变得更加柔和但是一旦我结束通话就会变得更响亮。

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);

这是我的代码。

2 个答案:

答案 0 :(得分:1)

我看到你正在尝试使用“强制音乐流到扬声器” - 我在another question的答案中发布的方法。

问题是在语音呼叫期间,音乐流将遵循语音呼叫的路由并忽略FOR_MEDIA强制标志。所以你认为音量较低很可能是音乐从耳机而不是扬声器播放的结果。

据我所知,在正常通话期间无法将音乐路由到扬声器,而无需将语音呼叫路由到扬声器(即使用setSpeakerPhoneOn)。

答案 1 :(得分:0)

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

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