这篇文章的原做者是 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 装置上运行的结果: