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, потому что он постоянно будет показывать объем пользовательского интерфейса. Кроме того, установка aM.setStreamVolume (AudioManager.STREAM_MUSIC, aM.getStreamMaxVolume (AudioManager.STREAM_MUSIC), 0); по какой-то причине приводит к сбою приложения.
Любые предложения о том, как заставить AudioManager работать каждый раз, чтобы громкая связь была включена, а громкость была максимальной во время телефонного звонка?
Edit: Даже с установкой speackphoneon к истине, как только onCallStateChanged вызывается метод, он до сих пор достоверно не поворачивая громкую. Громкость также ненадежна и не может показаться ей максимальной, без сбоев.
Вы заметили, что сам телефон отключает громкую связь при приеме вызова? Поэтому, если вы оба попытаетесь установить его одновременно и выключить, неудивительно, что он будет включаться только иногда. –
Этот код используется, когда телефон звонит, а не получает. Когда вызов сделан, я хочу включить громкую связь. – user3001127
То же самое - если телефон отключит его изначально, точка в том, что вы должны попробовать ожидание в течение 1 секунды, прежде чем включать его после приема вызова, чтобы он не переписывался обратно на «выключен» по телефону. –