2014-04-07 3 views
1

У меня небольшая проблема с MediaPlayer. Проблема появляется на Android 4.0.3 - 4.0.4. Случается, что мой метод onPrepare() не запускается вообще в этих двух версиях. Протестировано на 4.3 и 4.4 и без проблем.MediaPlayer onPrepared не уволен

Я понятия не имею, что может быть причиной того, что он не работает. Поэтому любые идеи, мысли и т. Д. Приветствуются.

ВОСПРОИЗВЕДЕНИЕ КОД:

 try { 
      if (!player.isPlaying()) { 
       player.reset(); 
       player.setOnPreparedListener(this); 
       player.setOnCompletionListener(mFragment); 
       player.setDataSource(String.valueOf(tmpUri)); 
       player.prepareAsync(); 
      } 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

старт() находится в по подготовке метода.

ошибка Logcat:

ERROR/MediaPlayer(10830): Error (1,-2147483648) 
    ERROR/MediaPlayer(10830): mOnErrorListener is null. Failed to send MEDIA_ERROR message. 
+0

отправить журнал кошка пожалуйста –

+0

добавил LogCat ошибка – JakubW

+0

визит http://stackoverflow.com/questions/10795388/android-mediaplayer-error-mediaplayer-error1-2147483648-on-stream-from-inte –

ответ

1

Ive нашел ответ на мой вопрос, поэтому я буду делить свою информацию.

В любом случае проблема заключалась в том, что на Android 4.0.4 и 4.0.3 при чтении mp3-файлов с памяти устройства setDataSource() не читал длину файла вправо. Что сделало MediaPlayer пойти психом и вызвать Error (1, -2147483648).

Android предоставил все файлы length = 0x7ffffffffffffffL.

Почему? Я не знаю;)

Fix:

File file = new File(uri); 
long length = file.getTotalSpace() 
FileInputStream is = new FileInputStream(file); 
player.setDataSource(is.getFD(), 0l, length); 
player.prepareAsync(); 

Вот оно! Надеюсь, это поможет кому-то с подобной проблемой, мир!

+0

Big thx. Это работа для меня. –

Смежные вопросы