我正在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;
    }

推荐答案

对于后来者,这将使其正常工作:

grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);

设置与您的应用程序相同的Packagename.

Android相关问答推荐

更新画布上的绘图以具有水平填充

AdMob:MobileAds. initialize()—java. lang. xml对于某些设备不能强制转换为java. lang. String""

Android Jetpack Compose Material3主题配色方案

Android和Rust,OpenSSL交叉编译在ARM V7上链接失败

更改Jetpack Compose中选定的选项卡底线 colored颜色

StateFlow和LazyColumn重组

如何使用进度条和返回函数进行API调用,同时在Android上使用Kotlin保持高效?

我需要在房间数据库中保留旧的自动迁移行吗?

如何将DrawableId参数传递给XML布局?

Android Jetpack Compose全宽度抽屉优化

通过 setIntentScanningStrategyEnabled(true) 未检测到信标的 Android Beacon 库后台扫描

使用 Dagger Hilt 获取接口的所有实例

Jetpack Compose 动画的行为是什么?

如何在 JetpackCompose 的 LazyColumn 中 Select 多个项目

单击过go 的文章时 NewsApp 崩溃

try 使用 ViewPager2 实现滑动视图时出现类型不匹配错误

删除项目时延迟列不更新

复用 RecyclerView 适配器,避免不必要的 API 调用

如何在 Jetpack Compose 中填充矢量图像的背景?

为什么我不能在屏幕外拿任何物体