Android进阶 2019-06-26
大家知道,AutodeskForge大部分是网络服务(webservice)的形式,在任何系统里只要能调用web service就可以使用。而网页浏览的Forge Viewer API基于WebGL技术,只要支持WebGL的浏览器就能加载,包括移动端。本期来看一下Android上此过程的实践。
本样例源代码在:https://github.com/Autodesk-F...
该样例演示了从获取token,创建bucket,上载Android存储的文件到Forge,启动转换服务,获取转换状态,直到得到转换完毕后模型的缩略图,最后启动一个网页打开这个模型。
三年前,此样例是基于Eclipse+ Android ADT开发。而就在2015年,Android正式宣布不再支持Android的ADT,官方支持的开发平台为Android Studio。两个平台在很多方面是类似的,但Android Studio在开发界面和工具,项目层次结构,模块依赖关系,打包方式等方面都有优化之处。这些都加快了样例代码的移植过程。这里有篇文章做了更多的对比介绍:
https://www.airpair.com/andro...
源码的ReadMe有详细的安装过程,这里有几点分享:
https://github.com/Autodesk-F...
此SDK很好的设计了异步调用,错误处理,而且包含了大部分Forge现有的服务端口。便于拓展测试。下载SDK后,通过其它合适的方式编译得到,笔者用的是Intelli IDEA。编译后在target文件夹得到的是所有依赖jar包。把它们拷贝到Android Studio项目中的lib文件夹。有两个jar包(httpcore-4.4.1.jar and httpclient-4.5.jar)不需要,因为高版本的Android SDK已经有新的http 调用库。
Only the original threadthat created a view hierarchy can touch its views.
这是因为doInBackground属于隐藏辅助线程,不能在这里对主线程的UI进行修改。经过研究,在AsyncTask::doInBackground调用publishProgress 方法通知变化,而在AsyncTask::onProgressUpdate修改TextView
https://stackoverflow.com/que...
<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...
本样例仍旧保留了这个方法,以备用。
https://models.autodesk.io/vi...
在弹出的浏览器中就可以看到模型了。
下一步是尝试研究只用原生的WebView控件把Forge Viewer集成到app中,而不用额外的集成框架封装。
欢迎分享您在Android开发上的宝贵经验!