2010-11-01 7 views
6

Ho cercato di utilizzare SoundPool per riprodurre la suoneria predefinita senza successo. Nel codice qui sottoRiproduzione suoneria predefinita

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); 

ottengo il "campione contenuti errore di caricamento/system/suoneria 0 Non pronto" messaggio. Sostituendo l'URI con un percorso difficile a un file mp3 esistente sulla scheda SD, si ottengono risultati simili.

Cosa sto sbagliando? Grazie,

Kyle

risposta

18

Probabilmente non si vuole essere utilizzando il Soundpool per questo tipo di riprodurre file audio. SoundPool viene solitamente utilizzato per riprodurre frammenti di audio molto piccoli, memorizzati come file locali, anche più piccoli della maggior parte delle suonerie. Dovresti invece prendere in considerazione MediaPlayer. Quanto segue dovrebbe funzionare molto bene:

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

Anche se non hai il permesso di accedere a tale suoneria dall'applicazione, si potrebbe ottenere un FileNotFoundException.

+0

Grazie - questo è esattamente ciò di cui avevo bisogno. Semplice, e ha fatto bene il trucco –

+0

Bella risposta. Solo una FYI non è necessario chiamare prepare() in caso di utilizzo di Factory Method create(). – IronBlossom

+0

Sei corretto IronBlossom. Il codice è stato modificato per rimuovere prepare(). –