본문 바로가기

나의 플랫폼/안드로이드

[Android] 내장 스피커로 연결 하기

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

먼저 말씀드리면, 이건 아주 간단하다.


소리를 내기 위해 MediaPlayer를 사용 한다.

(혹시 궁금하시면, http://androidhuman.com/158 여길 참고하세요.)


만약 이 소리를 내장스피커로 내고 싶다.

근데 내장스피커가 무슨 말이냐! 그냥 다 똑같은 스피커가 아니냐~!

넵 스피커 인데 기능이 좀 다릅니다.


바로 전화 통화 할때, 상대방 목소리가 들리는 스피커가 내장 스피커 이고,

음악 재생 어플에서 들리는 음악 소리는 여러분이 알고 계시는 외장 스피커로 보시면 됩니다.

따라서, 전화 통화 할때 스피커를 켜면 내장 스피커가 외장 스피커로 옮겨지게 되어

소리가 커지게 되는 것이죠.


그럼 내장 스피커로 어떻게 연결 시킬까요?

아래 함수로 끝입니다.

// 보이스콜 부분 테스트
public void playTest(Activity activity) {
// 스피커 온
// AudioManager audioManager = (AudioManager) activity.getSystemService(Context.AUDIO_SERVICE);
// audioManager.setSpeakerphoneOn(true);
try {
AssetFileDescriptor afd = activity.getAssets()
.openFd("sounds/test.mp3");
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
afd.close();
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (Exception e) {
if (RingQConfig.DEBUG) e.printStackTrace();
}
}

참고로 test.mp3 파일은 app/src/main/assets/sounds/test.mp3 에 위치해 있습니다.

위와 같이 assets 폴더에 잇는 mp3 파일을 읽어와서 MediaPlayer 에 연결 시킵니다.

이부분까지는 일반적으로 MediaPlayer를 실행하는 부분과 같습니다.


틀린 부분은 딱! setAudioStreamType 함수가 추가된 것입니다.

AudioManagver.STREAM_VOICE_CALL 로 지정하는 순간 내장 스피커로 MediaPlayer가 지정되어

플레이가 되는 것이죠.


소스를 보니 여러 타입의 Stream이 있네요.

/** The audio stream for phone calls */
public static final int STREAM_VOICE_CALL = AudioSystem.STREAM_VOICE_CALL;
/** The audio stream for system sounds */
public static final int STREAM_SYSTEM = AudioSystem.STREAM_SYSTEM;
/** The audio stream for the phone ring */
public static final int STREAM_RING = AudioSystem.STREAM_RING;
/** The audio stream for music playback */
public static final int STREAM_MUSIC = AudioSystem.STREAM_MUSIC;
/** The audio stream for alarms */
public static final int STREAM_ALARM = AudioSystem.STREAM_ALARM;
/** The audio stream for notifications */
public static final int STREAM_NOTIFICATION = AudioSystem.STREAM_NOTIFICATION;
/** @hide The audio stream for phone calls when connected to bluetooth */
public static final int STREAM_BLUETOOTH_SCO = AudioSystem.STREAM_BLUETOOTH_SCO;
/** @hide The audio stream for enforced system sounds in certain countries (e.g camera in Japan) */
public static final int STREAM_SYSTEM_ENFORCED = AudioSystem.STREAM_SYSTEM_ENFORCED;
/** The audio stream for DTMF Tones */
public static final int STREAM_DTMF = AudioSystem.STREAM_DTMF;
/** @hide The audio stream for text to speech (TTS) */
public static final int STREAM_TTS = AudioSystem.STREAM_TTS;


그리고 함수에서 주석 처리된 부분이 있는데요. 해당 부분을 호출 하면 내장 스피커에서 외장 스피커로 변경 됩니다. 딱 2줄만 넣어주시면 되요 ㅎ


AudioManager audioManager = (AudioManager) activity.getSystemService(Context.AUDIO_SERVICE);
audioManager.setSpeakerphoneOn(true);


참고하시면 좋을 듯합니다.