2010-08-20 2 views
14

У меня трещина при использовании объекта MediaPlayer и не имеет большого успеха. Если я добавлю звуковой актив в свою сырую папку и вызову его с использованием значения int внутри R, он отлично работает. Но я хочу, чтобы у меня все получилось.MediaPlayer.setDataSource() и prepare() не работает - android

Согласно всей документации, которую я прочитал, setDataSource() должен принять параметр строки с URL-адресом в файл.

Я продолжаю получать исключение IO в инструкции prepare(). Я даже попытался скопировать файл локально и до сих пор не кубик.

У кого-нибудь есть идеи?

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

ответ

20

Попробуйте MediaPlayer.create(), вы также можете начать только после того, как игрок на самом деле готов, например:

@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

Прекрасно работает с внешними URL-адресами (например, «http://google.com/»), но генерирует исключение при попытке локальных активов (например, «file: //android_asset/sound.mp3») :( – richtaur

+1

@richtaur что позволяет вам использовать ресурсы Android вместо обычных ресурсов? MediaPlaye.create (контекст контекста, int resid) должен отлично работать для внутренних медиафайлов приложений. –

+0

Просто сделайте мои вещи более организованными :) Ресурс папки достаточно хорош. – richtaur

12

Для потоков, вы должны позвонить prepareAsync(), который возвращает немедленно, а чем блокирование, пока не будет буферизировано достаточное количество данных.