Этот код раньше работал. Затем, может быть, я что-то изменил, где-то (или, если я знаю Android правильно, обновление внесло ошибку в медиаплеере). Перестал работать на некоторых устройствах! Особенно мой Nexus S (2.3.6).
Файл test.m4a
(17 775 201 байт) был загружен приложением. Чтобы проверить его целостность, я скопировал его на SD и воспроизвел на моем ПК. Нет проблем! Также в двоичном виде сравнил его с исходным файлом, и он соответствует 100%.
try {
_mediaPlayer = new MediaPlayer();
_mediaPlayer.setOnCompletionListener(this);
_mediaPlayer.setOnPreparedListener(this);
_mediaPlayer.setOnSeekCompleteListener(this);
_mediaPlayer.setOnBufferingUpdateListener(this);
_mediaPlayer.setOnInfoListener(this);
_mediaPlayer.setOnErrorListener(this);
// I even tried reading the file from SD card. Same error...
File file = new File("/data/data/com.mycompany.myapp/files/MediaCache/Test.m4a");
// file.isFile() == true
// file.length() == expected value!
FileInputStream is = new FileInputStream(file);
_mediaPlayer.setDataSource(is.getFD()); // Throws!
// If I use the filename as parameter, it throws later when preparing the media player...
_mediaPlayer.prepareAsync();
}
catch (Exception e) {
// java.io.IOException: setDataSourceFD failed.: status=0x80000000
e.printStackTrace();
}
Вопрос: Что может вызвать это IOException
для setDataSourceFD
когда файл действительно допустим?
ОБНОВЛЕНИЕ: Здесь аудиофайл 98 КБ, который я не могу воспроизвести на своем Nexus S (2.3.6): http://www.2shared.com/audio/wUKoRiQk/test.html
Мой друг запускает какое-то устройство ZTE (2.2), и оно, кажется, работает. Я не понимаю!