AudioManager在onCallStateChanged中不可靠。在打電話時,我需要打開揚聲器電話並將音量設置爲最大。它有時會打開免提電話(通常在第二次或稍後的通話過程中),很少打開音量。我的PhoneCallListener類在我的MainActivity類中。AudioManager不可靠
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。另外,設置a.setStreamVolume(AudioManager.STREAM_MUSIC,aM.getStreamMaxVolume(AudioManager.STREAM_MUSIC),0);出於某種原因崩潰了應用程序。
關於如何使AudioManager每次都工作,以便打電話時揚聲器電話已打開且音量最大的任何建議?
編輯:即使一旦onCallStateChanged方法被調用設置speackphoneon爲真,但它仍然是不可靠的開啓揚聲器。該卷也是不可靠的,似乎無法將其設置爲最大值,而不會崩潰。
您是否注意到手機本身在接到來電時會關閉揚聲器電話?所以,如果你們都試圖同時開啓和關閉它,那麼它有時候只會打開並不奇怪。 –
此代碼用於手機撥打電話時不接收。打電話時,我想讓揚聲器打開。 – user3001127
相同的區別 - 如果手機本身將其關閉,重要的是,您應該等待1秒鐘後再接收回電,然後再打開,以免手機重寫爲「關」。 –