2010-11-01 62 views
6

Varsayılan zil sesini başarılı olmadan oynatmak için SoundPool'u kullanmaya çalışıyorum.Varsayılan zil sesini çalma

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

Aşağıdaki kodda ben mesajı "yükleme hatası içerik/sistem/zil numuneyi 0 HAZIR değil" olsun. URI'yi varolan bir mp3 dosyasına sd kartındaki sabit bir yolla değiştirmek, benzer sonuçları verir.

Neyi yanlış yapıyorum? Teşekkürler,

Kyle

cevap

18

Muhtemelen ses çalma bu tür SoundPool kullanarak olmasını istemiyoruz. SoundPool genellikle, çoğu zil sesinden bile küçük olan yerel dosyalar olarak depolanan çok küçük ses parçacıklarını çalmak için kullanılır. Bunun yerine MediaPlayer'ı düşünmelisiniz. Aşağıdaki çok güzel çalışması gerektiğini:

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

Eğer uygulamadan o melodi erişim iznine sahip değilseniz de, bir FileNotFoundException alabilir.

+0

Teşekkürler - bu tam olarak ihtiyacım olan şey. Basit, ve güzel hile yaptı –

+0

Güzel cevap. Sadece bir FYI Factory Method create() kullanılması durumunda hazırlamak() çağırmak gerekmez. – IronBlossom

+0

Siz IronBlossom haklısınız. Hazırlama() 'yı kaldırmak için kod düzenlenmiştir. –