2011-12-23 10 views
6

Moim żądaniem jest włączenie zestawu głośnomówiącego za każdym razem, gdy inicjowane jest połączenie wychodzące. Próbowałem poniższy kod, ale nie działa. W rzeczywistości zestaw głośnomówiący włącza się w trakcie połączenia, przychodzi drugie połączenie!Włączanie zestawu głośnomówiącego za każdym razem, gdy wykonywane jest połączenie wychodzące

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(); 
      } 
     } 
} 

Dzięki.

+0

Znalazłem podobne pytanie tutaj, na które nie było odpowiedzi: http://www.anddev.org/novice-tutorials-f8/how-to-programmatically-turn-on-loudspeaker-when-make-receiv- t49421.html. Czy to błąd w systemie Android? – AllSolutions

+0

Zobacz moją odpowiedź tutaj: http://stackoverflow.com/a/25346769/2826409 –

Odpowiedz

5

Podobny padło pytanie i odpowiedział here.

Myślę, że odpowiedź może być w AndroidManifest.xml Twojego projektu. Spróbuj dodać:

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

do manifestu, który pozwoli Twojej aplikacji zmodyfikować ustawienia audio urządzenia.
Potrzebny będzie również zmienić tryb Audiomanager do MODE_IN_CALL:

audioManager.setMode(AudioManager.MODE_IN_CALL) 
9

Można ustawić go poprzez programowo jak poniżej:

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

Ale należy pamiętać, że nie zapomniał ustawić głośnik od kiedy przerwać połączenie:

audioManager.setSpeakerphoneOn(false); 

, a zestaw uprawnień w manifeście:

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

Ten kod działa dobrze dla mnie. Nadzieję, że będzie to pomocne.

+0

Dzięki. W KitKat 4.4.2 uprawnienie RECORD_AUDIO nie jest potrzebne, nie mogę powiedzieć o innych wersjach Androida. –

Powiązane problemy