Как импортировать файл SFB во время выполнения из локального хранилища?

Я хотел бы отобразить файл (andy.sfb) в ARcore. Этот файл можно получить от https:// и file://. Традиционно file:// назначается файлам в папке assets, которая упакована вместе с приложением. Однако цель состоит в том, чтобы загрузить 3D-модель, а затем указать путь (URI) из локального хранилища устройства, это может быть что-то вроде /storage/emulated/0/Download/andy.sfb. SFB означает двоичный файл SceneForm.

Моя задача состояла в том, чтобы отобразить среду выполнения модели из локального хранилища устройства. Проблема представлена ​​здесь подробно.

  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;
                        });

person Jonas Kgomo    schedule 29.04.2019    source источник
comment
Вы можете загрузить файл .sfb с сервера в локальное хранилище и загрузить этот файл .sfb.   -  person Krupa Kakkad    schedule 30.04.2019
comment
У меня проблема прямо сейчас, я могу успешно загрузить в локальное хранилище, но не могу получить (загрузить) файл. github.com/google-ar/sceneform-android-sdk/issues/ 528   -  person Jonas Kgomo    schedule 30.04.2019


Ответы (1)


Вы можете загрузить файл .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;
                    });
person Krupa Kakkad    schedule 01.05.2019