在 Android 上离线导览模型

这篇文章的原做者是 Autodesk ADN 的 Adam Nagy,如下以我简称。html

对 Forge Viewer 熟悉的朋友都知道能够透过 Viewer 在任何已支持的浏览器上观看模型,固然透过 Android 上的浏览器也是能够的。但有些朋友偏好将 Forge Viewer 镶嵌到移动端应用(Native App)里,因此咱们提供了这一个示例:
https://github.com/Autodesk-F...node

但在 Adnroid 上实做离线导览模型会有什么问题?主要是咱们的 viewer 的代码是使用 HTTP/HTTPS 通讯协议实做的,并不支持 file:// 这种档案协议,因此他没办法透过 file:// 这个协议从本地存储上载入模型文档。android

但我必需从本地存储上载入模型文档要怎么办呢?针对这个问题最一般的解法是在建置一个本地的 HTTP 服务器,让 viewer 能够 HTTP/HTTPS 协议来访问模型文档,而这个方法在 Android 上也是可行的。git

还有另外一个可行的办法是去覆载Android应用的 WebView 元件的文档载入方式让 viewer 能够从本地存储解析模型文档,这也是今天要讨论的内容。首先,咱们必需在AndroidManifest.xml里设置网络访问权限给咱们的 Android 应用:github

... 
  <uses-permission android:name="android.permission.INTERNET" />
</manifest>

在来咱们必需解决针对 Forge 模型压缩文档的文档大小超过 Android 本地文档限制的问题:
https://stackoverflow.com/que...浏览器

在这边咱们透过『把 gz 文档更名为 gz.mp3,在来把这些文档放到 WebView 的文档载入机制里』的这个方法来解决这个问题,如下是我使用的代码片断:服务器

class ViewerWebViewClient extends WebViewClient {
  
    Context context;

    public ViewerWebViewClient(Context con) {
        this.context = con;
    }

    public WebResourceResponse shouldInterceptRequest (WebView view,
                                                       WebResourceRequest request) {
        try {
            Uri uri = request.getUrl();
            String path = uri.getPath();
            if (path.startsWith("/android_asset/")) {
                try {
                    AssetManager assetManager = this.context.getAssets();
                    String relPath = path.replace("/android_asset/", "").replace("gz", "gz.mp3");
                    InputStream stream = assetManager.open(relPath);
                    return new WebResourceResponse(null, null, stream);
                } catch (IOException ex) {
                    String str = ex.getMessage();
                }
            }
        } catch (Exception ex) { }

        return null;
    }
}

不过这个方法只适用实体装置上,在 Android 的虚拟机没办法使用,由于 viewer 会尝试以 blob:file:xxx 的方式来解析模型文档,但最终会解析会失败。网络

本文章用到的 Android Studio 工程能够在这边下载:
https://github.com/adamenagy/...测试

若是想要测试本文章的内容,必需从 Autodesk Forge 服务器上下载 SVF 模型文档,能够看看 Philippe 大神的这篇博客:
https://forge.autodesk.com/bl...this

一但获取 SVF 文档后,咱们就能够将它方置到 Android Studio 工程的 assets/html 文件夹里。下面这张截图是在个人 Android 装置上运行的结果:
OfflineViewer

相关文章
相关标签/搜索