AudioManager는 onCallStateChanged에서 신뢰할 수 없습니다. 전화 통화 도중 스피커 폰을 켜고 최대 볼륨으로 설정해야합니다. 스피커폰을 켜기도하고 (일반적으로 두 번째 이후의 통화 중에) 볼륨을 올리는 경우는 거의 없습니다. My 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 내 나는 그것이 지속적으로 볼륨 UI를 표시하기 때문 AudioManager.FLAG_SHOW_UI를 해제했다. 또, aM.setStreamVolume (AudioManager.STREAM_MUSIC, aM.getStreamMaxVolume (AudioManager.STREAM_MUSIC), 0)을 설정합니다. 어떤 이유로 응용 프로그램을 중단합니다.
매회 AudioManager를 작동시켜 스피커폰이 켜져 있고 전화 통화 중에 볼륨이 최대가되는 방법에 대한 제안이 있으십니까?
편집 : 심지어 즉시 onCallStateChanged 메소드가 호출 될 때 true로 speackphoneon 설정으로, 여전히 신뢰성에 스피커폰을 켜 있지 않습니다. 볼륨도 신뢰할 수 없으며 충돌없이 최대로 설정할 수 없습니다.
전화를받을 때 전화 자체가 스피커폰을 끈다는 것을 알고 계셨습니까? 둘 다 동시에 켜고 끄는 경우 때때로 켜지는 것이 놀랄 일이 아닙니다. –
이 코드는 전화가 걸려 올 때 사용됩니다. 통화가 끝나면 스피커폰을 켜기를 원합니다. – user3001127
같은 차이점 - 전화가 기본적으로 꺼지게되는 경우 전화가 다시 수신되면 전화를 켜기 전에 1 초 동안 기다려야하므로 전화로 다시 겹쳐 쓰지 않도록하는 것이 중요합니다. –