Forge模型轉換和網頁瀏覽在Android上的實踐

你們知道,AutodeskForge大部分是網絡服務(webservice)的形式,在任何系統裏只要能調用web service就可使用。而網頁瀏覽的Forge Viewer API基於WebGL技術,只要支持WebGL的瀏覽器就能加載,包括移動端。本期來看一下Android上此過程的實踐。html

圖片描述

本樣例源代碼在:https://github.com/Autodesk-F...java

該樣例演示了從獲取token,建立bucket,上載Android存儲的文件到Forge,啓動轉換服務,獲取轉換狀態,直到獲得轉換完畢後模型的縮略圖,最後啓動一個網頁打開這個模型。android

圖片描述

三年前,此樣例是基於Eclipse+ Android ADT開發。而就在2015年,Android正式宣佈再也不支持Android的ADT,官方支持的開發平臺爲Android Studio。兩個平臺在不少方面是相似的,但Android Studio在開發界面和工具,項目層次結構,模塊依賴關係,打包方式等方面都有優化之處。這些都加快了樣例代碼的移植過程。這裏有篇文章作了更多的對比介紹:git

https://www.airpair.com/andro...github

源碼的ReadMe有詳細的安裝過程,這裏有幾點分享:web

  1. 之前的代碼,當時尚未Forge JAVA SDK,因此全部對Forge服務調用和處理都是從頭撰寫,而如今既然有了Forge JAVA SDK,直接拿來用。

https://github.com/Autodesk-F...api

此SDK很好的設計了異步調用,錯誤處理,並且包含了大部分Forge現有的服務端口。便於拓展測試。下載SDK後,經過其它合適的方式編譯獲得,筆者用的是Intelli IDEA。編譯後在target文件夾獲得的是全部依賴jar包。把它們拷貝到Android Studio項目中的lib文件夾。有兩個jar包(httpcore-4.4.1.jar and httpclient-4.5.jar)不須要,由於高版本的Android SDK已經有新的http 調用庫。android-studio

  1. SDK對Forge的調用是異步的,但這些過程不能直接在Android的主線程中執行,須要用AsyncTask封裝,因此樣例對每一步都作了一個AsyncTask,AsyncTask:: doInBackground,執行,而後獲得結果。在之前的代碼,AsyncTask:: doInBackground 獲得結果後,例如token,將在對應的TextView中顯示出這個字串。但移植中發現這會形成一個錯誤:

    Only the original threadthat created a view hierarchy can touch its views.瀏覽器

這是由於doInBackground屬於隱藏輔助線程,不能在這裏對主線程的UI進行修改。通過研究,在AsyncTask::doInBackground調用publishProgress 方法通知變化,而在AsyncTask::onProgressUpdate修改TextView網絡

  1. 在上載模型這一步,樣例設計的是從Android的擴展存儲中拿文件,在開發測試中,咱們須要放一些文件在仿真器(Emulator)裏,不知何故,小編的Android Device Monitor沒法打開,在嘗試各類方式無果後,經過命令行方式Put了一些文件。也好用。

https://stackoverflow.com/que...

  1. 最後一點挺有意思,雖然#3中放了文件,Environment.getExternalStorageDirectory() 沒有返回任何文件。但有關的permission是打開的

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

之前版本並未發生此現象。通過排查,最後發現多是從Android 6.0開始,app的有關權限並未在安裝時自動根據Manifest.xml激活,須要額外的步驟(ActivityCompat.requestPermissions)受權激活,

https://developer.android.com...

本樣例仍舊保留了這個方法,以備用。

  1. 轉換成功後,本例用新的網頁框架加載模型:

https://models.autodesk.io/vi...

在彈出的瀏覽器中就能夠看到模型了。

下一步是嘗試研究只用原生的WebView控件把Forge Viewer集成到app中,而不用額外的集成框架封裝。

歡迎分享您在Android開發上的寶貴經驗!

相關文章
相關標籤/搜索