AudioManager 在 onCallStateChanged 中不可靠。在通话期间,我需要它打开免提电话并将音量设置为最大。它有时会打开免提电话(通常在第二次或以后的通话中)并且很少调高音量。我的 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 方法后将扬声器设置为 true,它仍然不能可靠地打开扬声器。音量也不可靠,似乎无法在不崩溃的情况下将其设置为最大。