在 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

相關文章
相關標籤/搜索