2011-12-23 5 views
6

Мое требование - включать громкую связь при каждом исходящем вызове. Я попробовал следующий код, но он не работает. Фактически, громкая связь включается, когда посередине разговора приходит второй звонок!Включите громкую связь при каждом исходящем вызове

package in.co.allsolutions; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
//import android.view.View; 
import android.widget.Toast; 
import android.media.AudioManager; 

public class MyTelephonyBroadcastReceiver extends BroadcastReceiver { 

     @Override 
     public void onReceive(Context context, Intent intent) { 

      AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
      audioManager.setSpeakerphoneOn(true); 
      Bundle extras = intent.getExtras();    
      if (extras != null) { 

        String state = extras.getString(TelephonyManager.EXTRA_STATE); 
        Log.i("AS", "Message Received. State = " + state + ", Mode = " + audioManager.getMode()); 
        //audioManager.setMode(AudioManager.MODE_NORMAL); 
        //audioManager.setSpeakerphoneOn(true); 
//     if (state.equals("OFFHOOK")) 
//     {     
        //audioManager.setMode(AudioManager.MODE_CURRENT); 
        //audioManager.setSpeakerphoneOn(true); 
        //audioManager.setMode(AudioManager.MODE_IN_CALL); 
        //audioManager.setSpeakerphoneOn(true); 
        //audioManager.setMode(AudioManager.MODE_RINGTONE); 
        //audioManager.setSpeakerphoneOn(true); 
        if (audioManager.isSpeakerphoneOn()) { 
         Log.i("AS", "Speaker on - SUCCESS."); 
        } else { 
         Log.i("AS", "Speaker could not be turned on."); 
        } 
//     } 
      } else { 
        Toast.makeText(context, "Message Received without any state", Toast.LENGTH_LONG).show(); 
      } 
     } 
} 

Спасибо.

+0

Здесь я нашел аналогичный вопрос, на который тоже не было ответа: http://www.anddev.org/novice-tutorials-f8/how-to-programmatically-turn-on-loudspeaker-when-make-receiv- t49421.html. Это ошибка в Android? – AllSolutions

+0

См. Мой ответ здесь: http://stackoverflow.com/a/25346769/2826409 –

ответ

5

Аналогичный вопрос был задан вопрос и ответил here.

Я думаю, что ответ может быть в AndroidManifest.xml вашего проекта. Попробуйте добавить:

uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" 

в ваш манифест, который позволит вашему приложению изменять настройки звука устройства.
Вам также необходимо изменить режим AudioManager на MODE_IN_CALL:

audioManager.setMode(AudioManager.MODE_IN_CALL) 
9

Вы можете установить его с помощью программно, как показано ниже:

AudioManager audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE); 
audioManager.setMode(AudioManager.MODE_IN_CALL); 
audioManager.setSpeakerphoneOn(true); 

Но, имейте в виду, что не забыли установить динамик выключение, когда остановить вызов:

audioManager.setSpeakerphoneOn(false); 

И, набор разрешений в манифесте:

<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> 

Этот код отлично подходит для меня. Надеемся, это будет полезно для вас.

+0

Спасибо. В Kitkat 4.4.2 разрешение RECORD_AUDIO не нужно, я не могу сказать, что для других версий Android. –

Смежные вопросы