2010-11-01 20 views
6

J'ai essayé d'utiliser SoundPool pour jouer la sonnerie par défaut sans succès. Dans le code ci-dessousJouer la sonnerie par défaut

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

Je reçois le message "erreur de contenu de chargement/system/sonnerie échantillon 0 pas prêt". Le remplacement de l'URI par un chemin difficile vers un fichier mp3 existant sur la carte SD donne des résultats similaires.

Qu'est-ce que je fais mal? Merci,

kyle

Répondre

18

Vous ne voulez probablement pas être en utilisant le SOUNDPOOL pour ce type de lecture audio. SoundPool est généralement utilisé pour lire de très petits extraits audio, stockés en tant que fichiers locaux, même plus petits que la plupart des sonneries. Vous devriez considérer MediaPlayer à la place. Ce qui suit devrait fonctionner très bien:

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

Bien que si vous ne disposez pas l'autorisation d'accéder à cette sonnerie de votre application, vous pouvez obtenir un FileNotFoundException.

+0

Merci - c'est exactement ce dont j'avais besoin. Simple, et il a fait l'affaire bien –

+0

Belle réponse. Juste un FYI vous n'avez pas besoin d'appeler prepare() en cas d'utilisation de la méthode d'usine create(). – IronBlossom

+0

Vous avez raison IronBlossom. Le code a été modifié pour supprimer prepare(). –