Android 安卓:MediaMetadataRetriever导致;java.lang.RuntimeException:setDataSource失败:状态=0x8000000;

Android 安卓:MediaMetadataRetriever导致;java.lang.RuntimeException:setDataSource失败:状态=0x8000000;,android,video,android-intent,runtimeexception,mediametadataretriever,Android,Video,Android Intent,Runtimeexception,Mediametadataretriever,我试图通过intent选择视频文件,并从视频中提取元数据 但是,我从用户那里收到了一些错误报告,并报告了以下异常: Exception java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=12004, result=-1, data=Intent { dat=content://media/external/images/media/63141 flg=0x1 (has extras

我试图通过intent选择视频文件,并从视频中提取元数据

但是,我从用户那里收到了一些错误报告,并报告了以下异常:

Exception java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=12004, result=-1, data=Intent { dat=content://media/external/images/media/63141 flg=0x1 (has extras) }} to activity {my.app/my.app.VideoActivity}: 
java.lang.RuntimeException: setDataSource failed: status = 0x80000000
以下是代码捕获元数据:

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    Uri uri = intent.getData();
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    try {
        retriever.setDataSource(this, uri); // error occurs here
    } catch (IllegalArgumentException e) {
        e.printStackTrace();           
    } catch (SecurityException e) {
        e.printStackTrace();           
    }
}

为什么会出现异常以及如何修复它?

在较新的API版本中,此方法的一个问题是,它需要清单权限,而这在错误消息中并不总是很明显-请参阅此讨论:


如果这是一个问题,那么对于您的情况,我认为您的URI看起来像是本地文件,因此您需要文件读/写权限。如果它是一个internet URL,则您需要internet权限。

在较新的API版本中,此方法的一个问题是它需要清单权限,并且这在错误消息中并不总是很明显-请参阅此讨论:


如果这是一个问题,那么对于您的情况,我认为您的URI看起来像是本地文件,因此您需要文件读/写权限。如果是internet URL,则您需要internet许可。

您在这方面取得了任何进展吗?在我的测试中,同样的问题只发生在KK设备上,但还没有成功调查。你在这方面有什么进展吗?调查同样的问题还没有成功,在我的测试中它只发生在KK设备上