如何在Android Jellybean上打开扬声器ON

时间:2012-12-13 12:31:18

标签: android call android-4.2-jelly-bean

我要做的是从我的应用程序拨打电话并打开此电话中的发言人。

在Android 4.0上一切都很好,我只是在开始调用意图之前设置 audiomanager.setSpeakerphoneOn(true)

但是在Android 4.1 PhoneUtils上,在调用之前检查扬声器状态并将其关闭(logcat):

D/PhoneUtils( 1029): about to activate speaker
D/PhoneUtils( 1029): activateSpeakerIfDocked()...
I/PhoneUtils( 1029): Forcing speaker off when initiating a new outgoing call...

我还尝试使用以下方法监听呼叫状态:mTelephonyManager.listen(receiver,PhoneStateListener.LISTEN_CALL_STATE); 此接收器将捕获3个状态:

  • IDLE(对我来说不感兴趣)
  • CALL_STATE_RINGING(也不感兴趣,因为我需要使用拨出电话)
  • CALL_STATE_OFFHOOK(我虽然这会有所帮助)

但最后“事件”也是在PhoneUtils检查发言人状态(logcat)之前发送的:

11:43:48.089 D/KeyguardViewMediator( 665): keyguard receiver action : android.intent.action.PHONE_STATE
11:43:48.089 D/KeyguardViewMediator( 665): keyguard receiver TelephonyManager.EXTRA_STATE : OFFHOOK
11:43:48.099 D/PhoneUtils( 977): setAudioMode()...OFFHOOK
11:43:48.099 D/MyPhoneStateListener:main( 2590): catching call state CALL_STATE_OFFHOOK
11:43:48.099 D/MyPhoneStateListener:main( 2590): turning phone speaker on
...
11:43:48.119 D/PhoneUtils( 977): about to activate speaker
11:43:48.119 I/PhoneUtils( 977): Forcing speaker off when initiating a new outgoing call...

如果有人遇到同样的问题或有解决方案?

谢谢!

1 个答案:

答案 0 :(得分:1)

本周我遇到了这个问题..

读取果冻豆代码源,我发现了这段代码

// This is not an error but might cause users' confusion. Add log just in case.
Log.i(LOG_TAG, "Forcing speaker off when initiating a new outgoing call...");    
PhoneUtils.turnOnSpeaker(app, false, true);

就是这样,在版本4.1中,android强制扬声器在传入和传出呼叫中关闭。 我的解决方案是在开始拨打电话后打开我的呼叫状态广播接收器中的扬声器