Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MediaPlayer未更新文件持续时间_Android_Stream_Media Player_Radio_Duration - Fatal编程技术网

Android MediaPlayer未更新文件持续时间

Android MediaPlayer未更新文件持续时间,android,stream,media-player,radio,duration,Android,Stream,Media Player,Radio,Duration,我打开一个连接,将一个流下载到SD卡上的一个文件中。在写入一些字节后,我启动MediaPlayer播放该文件 我的问题是MediaPlayer只读取了在第二阶段计算的持续时间 准备这是正确的行为。当您使用MediaPlayer播放本地文件时,当MediaPlayer初始化时,文件将被扫描一次,不再开始进一步扫描。MediaPlayer不知道您将向文件追加更多数据。一种解决方案是使用MediaPlayer直接在网络上传输文件。我通过在新的媒体播放器中临时打开同一文件,获取持续时间并再次发布,解决了

我打开一个连接,将一个流下载到SD卡上的一个文件中。在写入一些字节后,我启动MediaPlayer播放该文件 我的问题是MediaPlayer只读取了在第二阶段计算的持续时间
准备这是正确的行为。当您使用MediaPlayer播放本地文件时,当MediaPlayer初始化时,文件将被扫描一次,不再开始进一步扫描。MediaPlayer不知道您将向文件追加更多数据。一种解决方案是使用MediaPlayer直接在网络上传输文件。

我通过在新的媒体播放器中临时打开同一文件,获取持续时间并再次发布,解决了这个问题。为了节省系统资源,只应定期执行此操作,例如每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;
}
public boolean fileSizeHasChanged(){
long currentFileSize=新文件(mCurrentMediaFile).length();
如果(currentFileSize==mLastFileSize)
返回false;
mLastFileSize=当前文件大小;
返回true;
}
public int getDuration(){
长currentDurationCheck=System.currentTimeMillis();
如果(currentDurationCheck-mLastDurationCheck<5000)
返回时间;
mLastDurationCheck=currentDurationCheck;
如果(!fileSizeHasChanged())
返回时间;
//mp是实际播放的主要媒体播放器,mp2是辅助媒体播放器
MediaPlayer mp2=新的MediaPlayer();
试一试{
mp2.setDataSource(mCurrentMediaFile);
mp2.prepare();
mDuration=mp2.getDuration();
mp2.释放();
}捕获(例外e){
e、 printStackTrace();
}
返回时间;
}

您能否添加一些代码,让我们确切了解它的工作原理?MediaPlayer有时是一个狡猾的野兽,看到实际的代码通常很有帮助。谢谢谢谢你的回答,我将流下载到文件中,以便稍后记录其中的一部分。有没有办法让MediaPlayer更新文件的新持续时间??Iphone播放器每秒更新一次持续时间