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 audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE); 
audioManager.setMode(AudioManager.MODE_IN_CALL); 
audioManager.setSpeakerphoneOn(true); 

그러나 : 당신은 프로그래밍 아래를 통해 설정할 수 있습니다

audioManager.setMode(AudioManager.MODE_IN_CALL) 
9

을 :
는 또한 MODE_IN_CALL하기 위해 audioManager 모드를 변경해야합니다 매니페스트

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 버전에 대해서는 말할 수 없습니다. –

관련 문제