在 Android NDK 中設定 ARCore 工作階段
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
設定 ARCore 工作階段,為您的應用程式打造 AR 體驗。
什麼是工作階段?
所有 AR 程序,例如動作追蹤
透過 ARCore 技術瞭解環境知識,以及估算亮度
會很有幫助ArSession
是 ARCore 的主要進入點
也能使用 Google Cloud CLI 或
Compute Engine API可管理 AR 系統狀態並處理工作階段生命週期
應用程式,建立、設定、開始或停止工作階段。最重要的是
應用程式即可接收允許存取相機圖片的影格
姿勢。
這個工作階段可用於設定下列功能:
確認 ARCore 已安裝且為最新版本
建立 ArSession
前,請確認 ARCore 已安裝且為最新版本。
如未安裝 ARCore,工作階段建立作業就會失敗,且後續任何後續作業
必須重新啟動應用程式,才能安裝或升級 ARCore。
/*
* Check if ARCore is currently usable, i.e. whether ARCore is supported and
* up to date.
*/
int32_t is_arcore_supported_and_up_to_date(void* env, void* context) {
ArAvailability availability;
ArCoreApk_checkAvailability(env, context, &availability);
switch (availability) {
case AR_AVAILABILITY_SUPPORTED_INSTALLED:
return true;
case AR_AVAILABILITY_SUPPORTED_APK_TOO_OLD:
case AR_AVAILABILITY_SUPPORTED_NOT_INSTALLED: {
ArInstallStatus install_status;
// ArCoreApk_requestInstall is processed asynchronously.
CHECK(ArCoreApk_requestInstall(env, context, true, &install_status) ==
AR_SUCCESS);
return false;
}
case AR_AVAILABILITY_UNSUPPORTED_DEVICE_NOT_CAPABLE:
// This device is not supported for AR.
return false;
case AR_AVAILABILITY_UNKNOWN_CHECKING:
// ARCore is checking the availability with a remote query.
// This function should be called again after waiting 200 ms
// to determine the query result.
handle_check_later();
return false;
case AR_AVAILABILITY_UNKNOWN_ERROR:
case AR_AVAILABILITY_UNKNOWN_TIMED_OUT:
// There was an error checking for AR availability.
// This may be due to the device being offline.
// Handle the error appropriately.
handle_unknown_error();
return false;
default: // All enum cases have been handled.
return false;
}
}
建立工作階段
在 ARCore 中建立並設定工作階段。
// Create a new ARCore session.
ArSession* ar_session = NULL;
CHECK(ArSession_create(env, context, &ar_session) == AR_SUCCESS);
// Create a session config.
ArConfig* ar_config = NULL;
ArConfig_create(ar_session, &ar_config);
// Do feature-specific operations here, such as enabling depth or turning on
// support for Augmented Faces.
// Configure the session.
CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);
關閉工作階段
ArSession
擁有大量的原生堆積記憶體。失敗
明確關閉工作階段可能會導致應用程式
用盡原生記憶體
當機。不再需要 AR 工作階段時,請呼叫
ArSession_destroy()
敬上
釋出資源
// Release memory used by the AR session.
ArSession_destroy(session);
後續步驟
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-26 (世界標準時間)。
[null,null,["上次更新時間:2025-07-26 (世界標準時間)。"],[[["\u003cp\u003eARCore sessions manage all AR processes like motion tracking and environmental understanding, and are accessed via the \u003ccode\u003eArSession\u003c/code\u003e object.\u003c/p\u003e\n"],["\u003cp\u003eBefore starting a session, verify ARCore is installed and updated using \u003ccode\u003eArCoreApk_checkAvailability\u003c/code\u003e to ensure smooth functionality.\u003c/p\u003e\n"],["\u003cp\u003eSessions can be configured to enable features like Depth API, Augmented Faces, or Cloud Anchors, providing flexibility for various AR experiences.\u003c/p\u003e\n"],["\u003cp\u003eTo avoid memory leaks and potential crashes, release session resources by calling \u003ccode\u003eArSession_destroy()\u003c/code\u003e when the session is no longer needed.\u003c/p\u003e\n"]]],[],null,["# Configure an ARCore session in Android NDK\n\nConfigure an ARCore session to build AR experiences for your app.\n\nWhat is a session?\n------------------\n\nAll [AR processes](/ar/discover/concepts), such as motion tracking,\nenvironmental understanding, and lighting estimation, happen inside an ARCore\nsession. [`ArSession`](/ar/reference/c/group/ar-session) is the main entry point to the ARCore\nAPI. It manages the AR system state and handles the session lifecycle, allowing\nthe app to create, configure, start, or stop a session. Most importantly, it\nenables the app to receive frames that allow access to the camera image and\ndevice pose.\n\nThe session can be used to configure the following features:\n\n- [Lighting Estimation](/ar/develop/lighting-estimation)\n- [Cloud Anchors](/ar/develop/cloud-anchors)\n- [Augmented Images](/ar/develop/augmented-images)\n- [Augmented Faces](/ar/develop/augmented-faces)\n- [Depth API](/ar/develop/depth)\n- [Instant Placement](/ar/develop/instant-placement)\n- [ARCore Geospatial API](/ar/develop/geospatial)\n\nVerify that ARCore is installed and up to date\n----------------------------------------------\n\nBefore creating an [`ArSession`](/ar/reference/c/group/ar-session), verify that ARCore is installed and up to date.\nIf ARCore isn't installed, session creation fails and any subsequent\ninstallation or upgrade of ARCore requires an app restart.\n\n\u003cbr /\u003e\n\n```c\n/*\n * Check if ARCore is currently usable, i.e. whether ARCore is supported and\n * up to date.\n */\nint32_t is_arcore_supported_and_up_to_date(void* env, void* context) {\n ArAvailability availability;\n ArCoreApk_checkAvailability(env, context, &availability);\n switch (availability) {\n case AR_AVAILABILITY_SUPPORTED_INSTALLED:\n return true;\n case AR_AVAILABILITY_SUPPORTED_APK_TOO_OLD:\n case AR_AVAILABILITY_SUPPORTED_NOT_INSTALLED: {\n ArInstallStatus install_status;\n // ArCoreApk_requestInstall is processed asynchronously.\n CHECK(ArCoreApk_requestInstall(env, context, true, &install_status) ==\n AR_SUCCESS);\n return false;\n }\n case AR_AVAILABILITY_UNSUPPORTED_DEVICE_NOT_CAPABLE:\n // This device is not supported for AR.\n return false;\n case AR_AVAILABILITY_UNKNOWN_CHECKING:\n // ARCore is checking the availability with a remote query.\n // This function should be called again after waiting 200 ms\n // to determine the query result.\n handle_check_later();\n return false;\n case AR_AVAILABILITY_UNKNOWN_ERROR:\n case AR_AVAILABILITY_UNKNOWN_TIMED_OUT:\n // There was an error checking for AR availability.\n // This may be due to the device being offline.\n // Handle the error appropriately.\n handle_unknown_error();\n return false;\n\n default: // All enum cases have been handled.\n return false;\n }\n}\n```\n\nCreate a session\n----------------\n\nCreate and configure a session in ARCore. \n\n```c\n// Create a new ARCore session.\nArSession* ar_session = NULL;\nCHECK(ArSession_create(env, context, &ar_session) == AR_SUCCESS);\n\n// Create a session config.\nArConfig* ar_config = NULL;\nArConfig_create(ar_session, &ar_config);\n\n// Do feature-specific operations here, such as enabling depth or turning on\n// support for Augmented Faces.\n\n// Configure the session.\nCHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);\n```\n\nClose a session\n---------------\n\n`ArSession` owns a significant amount of native heap memory. Failure to\nexplicitly close the session may cause your app to run out of native memory and\ncrash. When the AR session is no longer needed, call\n[`ArSession_destroy()`](/ar/reference/c/group/ar-session#arsession_destroy)\nto release resources. \n\n```c\n// Release memory used by the AR session.\nArSession_destroy(session);\n```\n\nNext steps\n----------\n\n- [ARCore quickstart for Android NDK](/ar/develop/c/quickstart)"]]