如何在运行时从本地存储导入SFB文件?

时间:2019-04-29 08:23:48

标签: local arcore sceneform

我想在ARcore中渲染文件(andy.sfb)。可以从https://file://获取此文件。传统上,将file://分配给资产文件夹中的文件,该文件夹与应用程序打包在一起。但是,目的是下载3D模型,然后从本地设备存储中给出路径( URI ),这可能类似于/storage/emulated/0/Download/andy.sfb SFB 代表SceneForm Binary。

我的挑战一直是从本地设备存储中呈现模型运行时。 问题在detail

中显示
  File file = new File("file:///storage/emulated/0/Download/andy.sfb");
            Callable callable = () -> {
            InputStream inputStream = new FileInputStream(file);
            return inputStream;
        };
        FutureTask task = new FutureTask<>(callable);
        new Thread(task).start();

        ModelRenderable.builder()
            .setSource(this, callable)
                .build()
                .thenAccept(renderable -> andyRenderable = renderable)
                .exceptionally(
                        throwable -> {
                            Toast toast =
                                    Toast.makeText(this, "Unable to load andy renderable", Toast.LENGTH_LONG);
                            toast.setGravity(Gravity.CENTER, 0, 0);
                            toast.show();
                            return null;
                        });

1 个答案:

答案 0 :(得分:0)

您可以将.sfb文件从服务器下载到本地存储,然后加载该.sfb文件。 要从本地存储加载对象,请使用以下代码:

ModelRenderable.builder()
            .setSource(this, Uri.fromFile(new File(path + fileName)))
            .build()
            .thenAccept(renderable -> {
                andyRenderable = renderable;
            })
            .exceptionally(
                    throwable -> {
                        Toast toast =
                              Toast.makeText(this, "Unable to load andy renderable", Toast.LENGTH_LONG);
                        toast.setGravity(Gravity.CENTER, 0, 0);
                        toast.show();
                        return null;
                    });