MediaPlayer没有更新文件持续时间

时间:2011-06-17 13:32:45

标签: android stream media-player radio duration

在写完一些字节后我打开一个连接将流下载到SD卡上的文件我启动MediaPlayer来播放文件 我的问题是MediaPlayer只读取了相位计算的Duratio 制备

2 个答案:

答案 0 :(得分:0)

这是正确的行为。当您使用MediaPlayer播放本地文件时,初始化MediaPlayer时将扫描文件一次,并且不会再启动扫描。 MediaPlayer不知道您会向该文件追加更多数据。一种解决方案是使用MediaPlayer直接通过网络流式传输文件。

答案 1 :(得分:0)

我通过在新的媒体播放器中暂时打开相同的文件来解决此问题,获取持续时间并再次释放它。为了节省系统资源,这应该只是定期进行,比如每隔5秒进行一次,并且只有在文件实际发生变化的情况下才会这样做。

public boolean fileSizeHasChanged() {
    long currentFileSize = new File(mCurrentMediaFile).length();
    if (currentFileSize == mLastFileSize)
        return false;
    mLastFileSize = currentFileSize;
    return true;
}

public int getDuration() {
    long currentDurationCheck = System.currentTimeMillis();
    if (currentDurationCheck - mLastDurationCheck < 5000)
        return mDuration;
    mLastDurationCheck = currentDurationCheck;

    if (!fileSizeHasChanged())
        return mDuration;

    // mp is the main media player actual playing, mp2 is the auxillary one
    MediaPlayer mp2 = new MediaPlayer();
    try {
        mp2.setDataSource(mCurrentMediaFile);
        mp2.prepare();
        mDuration = mp2.getDuration();
        mp2.release();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return mDuration;
}