搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > AutodeskADN > Forge模型转换和网页浏览在Android上的小实践

Forge模型转换和网页浏览在Android上的小实践

AutodeskADN 2018-02-15
举报

(点击原文页面,可方便查看超链接)

 大家知道,AutodeskForge大部分是网络服务(webservice)的形式,在任何系统里只要能调用web service就可以使用。而网页浏览的Forge Viewer API基于WebGL技术,只要支持WebGL的浏览器就能加载,包括移动端。本期来看一下Android上此过程的实践。

 

本样例源代码在:

https://github.com/Autodesk-Forge/viewer-android-sample

该样例演示了从获取token,创建bucket,上载Android存储的文件到Forge,启动转换服务,获取转换状态,直到得到转换完毕后模型的缩略图,最后启动一个网页打开这个模型。

 

Forge模型转换和网页浏览在Android上的小实践


三年前,此样例是基于Eclipse+ Android ADT开发。而就在2015年,Android正式宣布不再支持AndroidADT,官方支持的开发平台为Android Studio。两个平台在很多方面是类似的,但Android Studio在开发界面和工具,项目层次结构,模块依赖关系,打包方式等方面都有优化之处。这些都加快了样例代码的移植过程。这里有篇文章做了更多的对比介绍:

https://www.airpair.com/android/android-studio-vs-eclipse

 

源码的ReadMe有详细的安装过程,这里有几点分享:

1. 以前的代码,当时还没有Forge JAVA SDK,所以所有对Forge服务调用和处理都是从头撰写,而现在既然有了Forge JAVA SDK,直接拿来用。

https://github.com/Autodesk-Forge/forge-api-java-client

SDK很好的设计了异步调用,错误处理,而且包含了大部分Forge现有的服务端口。便于拓展测试。下载SDK后,通过其它合适的方式编译得到,笔者用的是Intelli IDEA。编译后在target文件夹得到的是所有依赖jar包。把它们拷贝到Android Studio项目中的lib文件夹。有两个jar包(httpcore-4.4.1.jar and httpclient-4.5.jar)不需要,因为高版本的Android SDK已经有新的http 调用库。


2. SDKForge的调用是异步的,但这些过程不能直接在Android的主线程中执行,需要用AsyncTask封装,所以样例对每一步都做了一个AsyncTaskAsyncTask::     doInBackground,执行,然后得到结果。在以前的代码,AsyncTask:: doInBackground 得到结果后,例如token,将在对应的TextView中显示出这个字串。但移植中发现这会造成一个错误:

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

这是因为doInBackground属于隐藏辅助线程,不能在这里对主线程的UI进行修改。经过研究,在AsyncTask::doInBackgroundpublishProgress 方法通知化,而在AsyncTask::onProgressUpdate修改TextView


3. 在上载模型这一步,样例设计的是从Android的扩展存储中拿文件,在开发测试中,我们需要放一些文件在仿真器(Emulator)里,不知何故,小编的Android Device Monitor无法打开,在尝试各种方式无果后,通过命令行方式Put了一些文件。也好用。

https://stackoverflow.com/questions/30434451/how-to-push-files-to-an-emulator-instance-using-android-studio


4. 最后一点挺有意思,虽然#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/training/permissions/requesting.html

本样例仍旧保留了这个方法,以备用。


5. 转换成功后,本例用新的网页框架加载模型:

https://models.autodesk.io/view.html?token=XXX&urn=YYY

在弹出的浏览器中就可以看到模型了。以前的网页框架已经失效。也可以自行搭建一个网络应用,这样能添加更多功能和自己的界面。


下一步是尝试研究只用原生的WebView控件把Forge Viewer集成到app中,而不用额外的集成框架封装。曾听到有朋友实现过,请不吝赐教。


欢迎分享您在Android开发上的宝贵经验!  




了解更多 Autodesk 最新开发资讯




Forge样例展示

亲自体验Forge的解决方案


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《Forge模型转换和网页浏览在Android上的小实践》的版权归原作者「AutodeskADN」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

举报