Android에서 벨소리 / 알람 사운드를 재생하는 방법을 어디에서나 찾고있었습니다.
버튼을 누르고 벨소리 / 알람 소리를 재생하고 싶습니다. 쉽고 간단한 샘플을 찾을 수 없었습니다. 예, 이미 알람 시계 소스 코드를 살펴 보았지만 간단하지 않고 컴파일 할 수 없습니다.
나는이 일을 할 수 없다 :
Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(this, alert);
final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
player.setAudioStreamType(AudioManager.STREAM_ALARM);
player.setLooping(true);
player.prepare();
player.start();
}
이 오류가 발생합니다.
04-11 17:15:27.638: ERROR/MediaPlayerService(30): Couldn't open fd for
content://settings/system/ringtone
그래서 .. 누군가가 기본 벨소리 / 알람을 재생하는 방법을 알고 있으면 알려주세요.
어떤 파일도 업로드하고 싶지 않습니다. 기본 벨소리 만 재생하면됩니다.
답변
다음과 같이 간단히 설정된 벨소리를 재생할 수 있습니다.
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
답변
사용자가 전화기에 알람을 설정하지 않은 경우 TYPE_ALARM은 null을 반환 할 수 있습니다. 이를 다음과 같이 설명 할 수 있습니다.
Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
if(alert == null){
// alert is null, using backup
alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
// I can't see this ever being null (as always have a default notification)
// but just incase
if(alert == null) {
// alert backup is null, using 2nd backup
alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
}
}
답변
이것이 내가 한 방식입니다.
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), notification);
mp.start();
markov00의 방식과 유사하지만 이미 백그라운드에서 재생되고있을 수있는 음악과 같은 다른 사운드를 방해하는 것을 방지하는 벨소리 대신 MediaPlayer를 사용합니다.
답변
귀하의 예는 기본적으로 내가 사용하는 것입니다. 그러나 에뮬레이터에서는 기본적으로 벨소리 content://settings/system/ringtone
가 없으며 재생 가능한 것으로 확인되지 않기 때문에 에뮬레이터에서는 작동하지 않습니다 . 내 실제 전화에서 잘 작동합니다.
답변
이것은 잘 작동합니다.
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
MediaPlayer thePlayer = MediaPlayer.create(getApplicationContext(), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
try {
thePlayer.setVolume((float) (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) / 7.0)),
(float) (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) / 7.0)));
} catch (Exception e) {
e.printStackTrace();
}
thePlayer.start();
답변
미래의 Google 사용자를 위해 : RingtoneManager.getActualDefaultRingtoneUri()
대신 RingtoneManager.getDefaultUri()
. 이름대로 실제 uri를 반환하므로 자유롭게 사용할 수 있습니다. 문서에서 getActualDefaultRingtoneUri()
:
현재 기본 사운드의 Uri를 가져옵니다. 이것은 실제 사운드 Uri를 제공합니다. 이것을 사용하는 대신 대부분의 클라이언트는 DEFAULT_RINGTONE_URI를 사용할 수 있습니다.
한편 getDefaultUri()
이렇게 말합니다.
특정 유형의 기본 벨소리에 대한 Uri를 반환합니다. 실제 벨소리의 소리 Uri를 반환하는 대신재생시 실제 사운드로 해석되는 상징적 Uri를.
답변
DDMS를 사용하여 / sdcard 폴더에 MP3 파일을 푸시하고 에뮬레이터를 다시 시작한 다음 미디어 애플리케이션을 열고 MP3 파일을 찾은 다음 길게 누르고 “전화 벨소리로 사용”을 선택할 수 있습니다.
오류가 사라졌습니다!
편집 : Ringdroid 응용 프로그램을 사용하여 해결 된 알림 소리 (예 : SMS)와 동일한 문제