2010-11-01 157 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); 

我收到消息「錯誤加載內容/系統/鈴聲樣本0不準備」。將硬盤路徑的URI替換爲SD卡上現有的mp3文件會得到相似的結果。

我在做什麼錯?謝謝,

凱爾

回答

18

你可能不希望使用的Soundpool這種類型的音頻播放是。 SoundPool通常用於播放非常小的音頻片段,存儲爲本地文件,甚至比大多數鈴聲還小。您應該考慮MediaPlayer。下面應該非常漂亮的工作:

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

但如果你沒有權限從應用程序訪問的鈴聲,你可以得到一個FileNotFoundException異常。

+0

謝謝 - 這正是我所需要的。簡單,它很好地訣竅 – 2010-11-01 04:54:26

+0

好的答案。只是一個FYI,如果使用Factory Method create(),你不需要調用prepare()。 – IronBlossom 2012-10-20 11:35:20

+0

你是對的IronBlossom。代碼已被編輯以刪除prepare()。 – 2012-10-23 01:36:33