Configure an ARCore session in Android

Configure an ARCore session to build AR experiences for your app.

What is a session?

All AR processes , such as motion tracking, environmental understanding, and lighting estimation, happen inside an ARCore session. Session is the main entry point to the ARCore API. It manages the AR system state and handles the session lifecycle, allowing the app to create, configure, start, or stop a session. Most importantly, it enables the app to receive frames that allow access to the camera image and device pose.

The session can be used to configure the following features:

Verify that ARCore is installed and up to date

Before creating a Session , verify that ARCore is installed and up to date. If ARCore isn't installed, session creation fails and any subsequent installation or upgrade of ARCore requires an app restart.

Java

  // Verify that ARCore is installed and using the current version. 
 private 
  
 boolean 
  
 isARCoreSupportedAndUpToDate 
 () 
  
 { 
  
 ArCoreApk 
 . 
 Availability 
  
 availability 
  
 = 
  
 ArCoreApk 
 . 
 getInstance 
 (). 
 checkAvailability 
 ( 
 this 
 ); 
  
 switch 
  
 ( 
 availability 
 ) 
  
 { 
  
 case 
  
 SUPPORTED_INSTALLED 
 : 
  
 return 
  
 true 
 ; 
  
 case 
  
 SUPPORTED_APK_TOO_OLD 
 : 
  
 case 
  
 SUPPORTED_NOT_INSTALLED 
 : 
  
 try 
  
 { 
  
 // Request ARCore installation or update if needed. 
  
 ArCoreApk 
 . 
 InstallStatus 
  
 installStatus 
  
 = 
  
 ArCoreApk 
 . 
 getInstance 
 (). 
 requestInstall 
 ( 
 this 
 , 
  
 true 
 ); 
  
 switch 
  
 ( 
 installStatus 
 ) 
  
 { 
  
 case 
  
 INSTALL_REQUESTED 
 : 
  
 Log 
 . 
 i 
 ( 
 TAG 
 , 
  
 "ARCore installation requested." 
 ); 
  
 return 
  
 false 
 ; 
  
 case 
  
 INSTALLED 
 : 
  
 return 
  
 true 
 ; 
  
 } 
  
 } 
  
 catch 
  
 ( 
 UnavailableException 
  
 e 
 ) 
  
 { 
  
 Log 
 . 
 e 
 ( 
 TAG 
 , 
  
 "ARCore not installed" 
 , 
  
 e 
 ); 
  
 } 
  
 return 
  
 false 
 ; 
  
 case 
  
 UNSUPPORTED_DEVICE_NOT_CAPABLE 
 : 
  
 // This device is not supported for AR. 
  
 return 
  
 false 
 ; 
  
 case 
  
 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. 
  
 case 
  
 UNKNOWN_ERROR 
 : 
  
 case 
  
 UNKNOWN_TIMED_OUT 
 : 
  
 // There was an error checking for AR availability. This may be due to the device being offline. 
  
 // Handle the error appropriately. 
  
 } 
 } 
 

Kotlin

  // Verify that ARCore is installed and using the current version. 
 fun 
  
 isARCoreSupportedAndUpToDate 
 (): 
  
 Boolean 
  
 { 
  
 return 
  
 when 
  
 ( 
 ArCoreApk 
 . 
 getInstance 
 (). 
 checkAvailability 
 ( 
 this 
 )) 
  
 { 
  
 Availability 
 . 
 SUPPORTED_INSTALLED 
  
 - 
>  
 true 
  
 Availability 
 . 
 SUPPORTED_APK_TOO_OLD 
 , 
  
 Availability 
 . 
 SUPPORTED_NOT_INSTALLED 
  
 - 
>  
 { 
  
 try 
  
 { 
  
 // Request ARCore installation or update if needed. 
  
 when 
  
 ( 
 ArCoreApk 
 . 
 getInstance 
 (). 
 requestInstall 
 ( 
 this 
 , 
  
 true 
 )) 
  
 { 
  
 InstallStatus 
 . 
 INSTALL_REQUESTED 
  
 - 
>  
 { 
  
 Log 
 . 
 i 
 ( 
 TAG 
 , 
  
 "ARCore installation requested." 
 ) 
  
 false 
  
 } 
  
 InstallStatus 
 . 
 INSTALLED 
  
 - 
>  
 true 
  
 } 
  
 } 
  
 catch 
  
 ( 
 e 
 : 
  
 UnavailableException 
 ) 
  
 { 
  
 Log 
 . 
 e 
 ( 
 TAG 
 , 
  
 "ARCore not installed" 
 , 
  
 e 
 ) 
  
 false 
  
 } 
  
 } 
  
 Availability 
 . 
 UNSUPPORTED_DEVICE_NOT_CAPABLE 
  
 - 
>  
 // This device is not supported for AR. 
  
 false 
  
 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. 
  
 } 
  
 Availability 
 . 
 UNKNOWN_ERROR 
 , 
  
 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. 
  
 } 
  
 } 
 } 
 

Create a session

Create and configure a session in ARCore.

Java

  public 
  
 void 
  
 createSession 
 () 
  
 { 
  
 // Create a new ARCore session. 
  
 session 
  
 = 
  
 new 
  
 Session 
 ( 
 this 
 ); 
  
 // Create a session config. 
  
 Config 
  
 config 
  
 = 
  
 new 
  
 Config 
 ( 
 session 
 ); 
  
 // Do feature-specific operations here, such as enabling depth or turning on 
  
 // support for Augmented Faces. 
  
 // Configure the session. 
  
 session 
 . 
 configure 
 ( 
 config 
 ); 
 } 
 

Kotlin

  fun 
  
 createSession 
 () 
  
 { 
  
 // Create a new ARCore session. 
  
 session 
  
 = 
  
 Session 
 ( 
 this 
 ) 
  
 // Create a session config. 
  
 val 
  
 config 
  
 = 
  
 Config 
 ( 
 session 
 ) 
  
 // Do feature-specific operations here, such as enabling depth or turning on 
  
 // support for Augmented Faces. 
  
 // Configure the session. 
  
 session 
 . 
 configure 
 ( 
 config 
 ) 
 } 
 

Close a session

Session owns a significant amount of native heap memory. Failure to explicitly close the session may cause your app to run out of native memory and crash. When the AR session is no longer needed, call close() to release resources. If your app contains a single AR-enabled activity, call close() from the activity's onDestroy() method.

Java

  // Release native heap memory used by an ARCore session. 
 session 
 . 
 close 
 (); 
 

Kotlin

  // Release native heap memory used by an ARCore session. 
 session 
 . 
 close 
 () 
 

Next steps

Create a Mobile Website
View Site in Mobile | Classic
Share by: