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

如何判断移动设备是否支持OpenXR?适配Google Cardboard场景

解决方案

核心结论

不要依赖设备型号列表判断,同型号设备可能因系统版本、是否安装OpenXR运行时等出现支持差异,动态检测OpenXR运行时可用性是最可靠的方法,具体实现思路如下:


1. 直接尝试初始化OpenXR实例(推荐)

调用OpenXR核心初始化接口xrInitializeInstance,根据返回结果判断设备支持情况:

  • 初始化成功 → 设备存在可用的OpenXR运行时;
  • 返回XR_ERROR_RUNTIME_UNAVAILABLE等错误 → 设备不支持或未安装运行时。

代码示例(C++)

#include <openxr/openxr.h>

bool isOpenXRSupported() {
    XrInstanceCreateInfo createInfo{};
    createInfo.type = XR_TYPE_INSTANCE_CREATE_INFO;
    createInfo.applicationInfo.apiVersion = XR_CURRENT_API_VERSION;
    createInfo.applicationInfo.applicationName = "YourVRApp";
    createInfo.applicationInfo.applicationVersion = 1;

    XrInstance instance;
    XrResult result = xrInitializeInstance(&instance, &createInfo);
    
    if (result == XR_SUCCESS) {
        xrDestroyInstance(instance);
        return true;
    }
    return false;
}

2. Android平台预检测(辅助筛选)

针对Android设备,可先通过包管理器检查常见OpenXR运行时包,快速过滤明显不支持的设备,但最终仍需以实例初始化结果为准:

代码示例(Kotlin)

fun hasOpenXRRuntime(context: Context): Boolean {
    val packageManager = context.packageManager
    val runtimePackageNames = listOf(
        "com.google.android.openxr",
        "com.samsung.android.openxr",
        "com.oculus.openxr"
    )
    
    return runtimePackageNames.any { packageName ->
        try {
            packageManager.getPackageInfo(packageName, 0)
            true
        } catch (e: PackageManager.NameNotFoundException) {
            false
        }
    }
}

3. Google Cardboard设备额外说明

Google Cardboard属于低成本VR方案,多数入门级适配设备默认不预装OpenXR运行时,仅部分中高端设备可通过系统更新或手动安装Google OpenXR服务获得支持。因此,即使是Cardboard适配设备,也必须通过动态检测确认支持性,无法仅靠设备型号覆盖所有场景。

内容的提问来源于stack exchange,提问作者sunjinbo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:13:10