我正在try 从我的应用程序外部的"共享菜单"接收文件,然后处理它.我收到Uri
并将其转换为fileDescriptor
,将其放入静态变量中,然后在另一个活动中使用该变量.问题是,在第一个活动中,每件事都工作得很好(比如用MetaDataRetriever
获得缩略图),但在下一个活动中,使用相同的方法,它会给出错误java.lang.RuntimeException: setDataSource failed: status = 0x80000000
.如果我直接使用URI
,也会发生同样的情况.我知道我可以在同一个活动上做所有的事情,但我更喜欢在不同的活动上做.
public static Bitmap videoThumbMini(FileDescriptor descriptor) {
Bitmap bitmap = 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;
}