我正在尝试从应用程序外部的“共享菜单”接收文件,然后对其进行处理。我收到
Uri
并将其转换为 fileDescriptor
,将其放入静态变量中,然后在另一个活动中使用该变量。问题是在第一个活动中,一切都运行良好(例如使用 MetaDataRetriever
获取缩略图),但在下一个活动中,使用相同的方法,它会给出错误 java.lang.RuntimeException: setDataSource failed: status = 0x80000000
。如果我直接使用 URI
也会发生同样的情况。我知道我可以在同一项活动中完成所有任务,但更喜欢在单独的活动中完成。
`公共静态位图 videoThumbMini(FileDescriptor 描述符) { 位图 位图 = null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setDataSource(descriptor);
bitmap = retriever.getFrameAtTime(1000);
if (bitmap == null)
return null;
float ratio = 1;
if (bitmap.getHeight() > 300)
ratio = bitmap.getHeight() / 300f;
bitmap = Bitmap.createScaledBitmap(bitmap, (int) (bitmap.getWidth() / ratio), 200, false);
} catch (RuntimeException e) {
Logger.log(e.getMessage() + " ERR3", false, e);
} finally {
try {
retriever.release();
} catch (Exception e) {
Logger.log(e.getMessage() + " ERR4", false, e);
}
}
return bitmap;
}`
对于后来的人来说,这可以使其正常工作:
grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
将包名称设置为与您的应用程序相同。