2010-11-01 2 views
6

Я пытаюсь использовать SoundPool для воспроизведения стандартного рингтона без успеха. В коде нижеВоспроизведение мелодии звонка по умолчанию

String ringtone = Settings.System.DEFAULT_RINGTONE_URI.getPath(); 
SoundPool ringPhone = new SoundPool(2, AudioManager.STREAM_RING, 1); 
int soundID = ringPhone.load(Settings.System.DEFAULT_RINGTONE_URI.getPath(), 1); 
int soundID = ringPhone.load(ringtone, 1); 
ringPhone.play(soundID, 0.99f, 0.99f, 1, 0, 1); 

Я получаю «пробу содержания ошибки загрузки/системы/рингтон-не готова» сообщения. Замена URI жестким путем на существующий mp3-файл на SD-карте дает аналогичные результаты.

Что я делаю неправильно? Спасибо,

Kyle

ответ

18

Вы, вероятно, не хотите быть с помощью Soundpool для данного типа воспроизведения звука. SoundPool обычно используется для воспроизведения очень маленьких фрагментов аудио, хранящихся в виде локальных файлов, даже меньших, чем большинство мелодий звонка. Вместо этого вы должны рассмотреть MediaPlayer. Следующие должны работать очень хорошо:

MediaPlayer player = MediaPlayer.create(this, 
    Settings.System.DEFAULT_RINGTONE_URI); 
player.start(); 

Хотя, если у вас нет разрешения на доступ к этой мелодии из вашего приложения, вы можете получить FileNotFoundException.

+0

Спасибо - это именно то, что мне нужно. Простой, и он сделал трюк красиво –

+0

Хороший ответ. Просто FYI вам не нужно вызывать prepare() в случае использования Factory Method create(). – IronBlossom

+0

Вы правы IronBlossom. Код был отредактирован для удаления prepare(). –

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