2

私がやろうとしているのは、アプリから電話をかけ、この電話でスピーカーをオンにすることです。

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...

誰かが同じ問題に直面したり、解決策を持っている場合はどうなりますか?

ありがとう!

4

1 に答える 1

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 では、着信コールと発信コールでスピーカーが強制的にオフにされます。私の解決策は、通話を開始した後、通話状態ブロードキャストレシーバーのスピーカーをオンにすることです

于 2012-12-19T11:34:50.767 に答える