2010-08-20 16 views
14

MediaPlayer nesnesini kullanmama ve çok fazla başarı elde etme konusunda bir çatlak yaşıyorum. Ham klasörüme bir ses öğesi ekler ve R içindeki int değerini kullanarak ararsam, iyi çalışır. Ama ben bir şeyleri url'den çekebilmek istiyorum.MediaPlayer.setDataSource() ve hazırla() çalışmıyor - android

Okuduğum tüm belgelere göre setDataSource() bir dosyaya bir url ile bir dize param kabul etmelidir.

Hazırlık() ifadesinde IO istisnası alıyorum. Dosyayı yerel olarak kopyalamayı denedim ve hala zar atmam.

Herhangi bir fikri olan var mı?

MediaPlayer mp = new MediaPlayer(); 
try { 
     mp.setDataSource("http://www.urltofile.com/file.mp3"); 
     mp.prepare(); 
     mp.start(); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

cevap

20

MediaPlayer.create() oyuncu örneğin, aslında hazır sonra, ayrıca sadece başlamak isteyebilirsiniz deneyin:

akışları için
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    MediaPlayer player = MediaPlayer.create(this, Uri.parse("http://www.urltofile.com/file.mp3")); 
    player.setOnPreparedListener(new OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
     } 
    }); 
} 
+3

Dış URL'lerle mükemmel çalışır (ör. "Http://google.com/") ancak yerel öğeleri denerken bir istisna atar (ör. "File: //android_asset/sound.mp3") :( – richtaur

+1

@richtaur normal kaynakları yerine android varlıklarını kullanmak için ne yapar? MediaPlaye.create (Bağlam bağlamı, int sakin) uygulama iç medya dosyaları için harika çalışmalıdır. –

+0

Sadece benim şeyler daha düzenli hale ederim :) Kaynakları klasörü yeterince iyi. – richtaur

12

, yerine, hemen döner prepareAsync(), çağırmalıdır Yeterli veri arabelleğe alınana kadar engelleme.

İlgili konular