AudioManager は onCallStateChanged では信頼できません。通話中に、スピーカーフォンをオンにして音量を最大に設定する必要があります。スピーカーフォンをオンにすることがあり (通常は 2 回目以降の通話中)、音量を上げることはめったにありません。私の PhoneCallListener クラスは、私の MainActivity クラス内にあります。
private class PhoneCallListener extends PhoneStateListener
{
private boolean isPhoneCalling = false;
@Override
public void onCallStateChanged(int state, String incomingNumber)
{
AudioManager aM = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
aM.setMode(AudioManager.MODE_IN_CALL);
aM.setSpeakerphoneOn(true);
if(TelephonyManager.CALL_STATE_RINGING == state)
{
//phone ringing
aM.setSpeakerphoneOn(true);
aM.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
}
if(TelephonyManager.CALL_STATE_OFFHOOK == state)
{
//phone active
aM.setSpeakerphoneOn(true);
aM.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, 0);
isPhoneCalling = true;
}
if(TelephonyManager.CALL_STATE_IDLE == state)
{
aM.setSpeakerphoneOn(false);
if(isPhoneCalling)
{
Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
isPhoneCalling = false;
}
}
}
}
CALL_STATE_OFFHOOK 内で AudioManager.FLAG_SHOW_UI をオフにする必要がありました。これは、ボリューム UI が継続的に表示されるためです。また、aM.setStreamVolume(AudioManager.STREAM_MUSIC, aM.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0); を設定します。何らかの理由でアプリがクラッシュします。
通話中にスピーカーフォンがオンになり、音量が最大になるように、AudioManager を毎回動作させる方法に関する提案はありますか?
編集: onCallStateChanged メソッドが呼び出されるとすぐに speackphoneon を true に設定しても、スピーカーフォンを確実にオンにすることはできません。音量も信頼できず、クラッシュせずに最大に設定できないようです.