You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Sceneform框架无法直接从服务器加载.sfb模型问题求助

问题解决方案

按以下顺序排查修复即可解决远程sfb模型加载不显示的问题:

  1. 解决Android明文HTTP限制
    Android 9.0(API level 28)及以上系统默认禁止HTTP明文请求,你当前用的是HTTP地址,需要做如下配置:
    在AndroidManifest.xml的<application>标签中添加属性:
android:usesCleartextTraffic="true"

正式上线建议将服务器升级为HTTPS协议,关闭明文权限保障安全。
2. 检查服务器MIME类型配置
需要确认你的文件服务器对.sfb后缀的文件配置了正确的MIME类型,推荐设置为application/octet-stream,否则Sceneform无法正确识别文件格式,会出现加载无报错但无渲染对象的问题。
3. 验证网络连通性
先在测试设备的系统浏览器中输入你的模型地址http://10.0.0.193:90/fbx/A320_Anim.sfb,确认可以正常下载模型文件,排除服务器配置、局域网连通性问题。
4. 优化代码加载逻辑
你当前将按钮点击监听放在了平面点击回调中,需要先点击平面再点按钮才会触发加载,且模型加载是异步操作,建议提前预加载模型提升体验,优化后的代码参考:

@RequiresApi(Build.VERSION_CODES.N)
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    arFragment = sceneform_fragment as ArFragment
    // 启动页就预加载远程模型
    preloadRemoteModel()
    var selectedAnchor: Anchor? = null
    arFragment.setOnTapArPlaneListener { hitResult, plane, _ ->
        if (plane.type != Plane.Type.HORIZONTAL_UPWARD_FACING) return@setOnTapArPlaneListener
        selectedAnchor = hitResult.createAnchor()
        Toast.makeText(this, "平面已选中,点击放置按钮即可显示模型", Toast.LENGTH_SHORT).show()
    }
    btnStart.setOnClickListener {
        when {
            rendarable == null -> Toast.makeText(this, "模型还在加载中,请稍候再试", Toast.LENGTH_SHORT).show()
            selectedAnchor == null -> Toast.makeText(this, "请先点击识别到的平面", Toast.LENGTH_SHORT).show()
            else -> addtoScene(arFragment, selectedAnchor, rendarable)
        }
    }
}
@RequiresApi(Build.VERSION_CODES.N)
private fun preloadRemoteModel() {
    ModelRenderable.builder()
        .setSource(this, Uri.parse(modellink))
        .build()
        .thenAccept {
            rendarable = it
            Toast.makeText(this, "模型加载完成,可放置使用", Toast.LENGTH_SHORT).show()
        }
        .exceptionally { throwable ->
            runOnUiThread {
                AlertDialog.Builder(this)
                    .setTitle("模型加载失败")
                    .setMessage(throwable.localizedMessage)
                    .show()
            }
            return@exceptionally null
        }
}

完成以上操作后即可正常加载远程服务器的sfb模型。

内容的提问来源于stack exchange,提问作者Syed Abdul Rahim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:45:04