MediaPlayer onPrepared没有被解雇

时间:2014-04-07 10:57:20

标签: android android-mediaplayer

我对MediaPlayer有点问题。 问题出现在Android 4.0.3 - 4.0.4上。 发生的事情是我的onPrepare()方法在这两个版本上根本没有被触发。 经过4.3和4.4的测试,没有任何问题。

我不知道它不起作用的原因是什么。所以任何想法,想法等都是受欢迎的。

播放代码:

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

start()在准备方法中。

Logcat错误:

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

1 个答案:

答案 0 :(得分:1)

我找到了问题的答案,所以我要分享我的信息。

无论如何,问题是在Android 4.0.4和4.0.3上读取mp3文件时 设备内存setDataSource()没有读取文件的长度。 这使MediaPlayer成为心理学家,并致电错误(1,-2147483648)。

Android正在给所有文件长度= 0x7ffffffffffffffL。

为什么呢?我不知道;)

修正:

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

就是这样! 希望它会帮助有类似问题的人,和平!