Как импортировать файл SFB во время выполнения из локального хранилища? - PullRequest
2 голосов
/ 29 апреля 2019

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

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

  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 голосов
/ 01 мая 2019

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