Android 如何知道任何媒体文件的持续时间

Android 如何知道任何媒体文件的持续时间,android,Android,我的应用程序显示SD卡中的媒体(音频和视频)文件列表以及文件大小、mime类型。现在我想在每个列表项中添加媒体文件的总持续时间。 我尝试使用以下代码获取持续时间 String[] proj = { MediaStore.Video.VideoColumns.DURATION }; Cursor cursor = managedQuery(contentUri, proj, null, null, null); int column_index = cursor.getColumnInde

我的应用程序显示SD卡中的媒体(音频和视频)文件列表以及文件大小、mime类型。现在我想在每个列表项中添加媒体文件的总持续时间。 我尝试使用以下代码获取持续时间

String[] proj = { MediaStore.Video.VideoColumns.DURATION };
 Cursor cursor = managedQuery(contentUri, proj, null, null, null);
 int column_index
  = cursor.getColumnIndexOrThrow(MediaStore.Video.VideoColumns.DURATION);
但是
MediaStore
仅当媒体之前播放时才返回正确的持续时间,否则返回0。我无法使用
videoview.getDuration
,因为我不想播放视频。
我希望您帮助我了解我是否在上述代码中犯了任何错误,或者是否有任何其他方法可以在不首先播放的情况下获取持续时间

您应该能够使用MediaMetadataRetriever从文件中读取持续时间。但是使用这个类需要你的项目至少达到API级别10(Android 2.3.3)。

谢谢Dennis,我会看看这个类。将使用结果更新此线程。谢谢Dennis,我可以使用MediaMetaDataRetriever获取视频文件的持续时间。我的应用程序是为API级别10及以上而设计的,所以这个API很方便。很高兴知道我能提供帮助,而且它没有破坏你的应用程序的设备兼容性。