Code: Select all
core = "1.47.0"
core = { module = "com.google.ar:core", version.ref = "core" }
sceneformUx = "1.17.1"
sceneform-ux = { group = "com.google.ar.sceneform.ux", name = "sceneform-ux", version.ref = "sceneformUx" }
Code: Select all
Code: Select all
private lateinit var arFragment: ArFragment
arFragment = supportFragmentManager.findFragmentById(R.id.ar_scene_view) as ArFragment
private fun initializeAR() {
var exception: Exception? = null
try {
when (ArCoreApk.getInstance().requestInstall(this, true)) {
ArCoreApk.InstallStatus.INSTALLED -> setupSession()
ArCoreApk.InstallStatus.INSTALL_REQUESTED -> return
}
} catch (e: Exception) {
exception = e
}
if (exception != null || arSession == null) {
Toast.makeText(this, "ARCore failed to initialize", Toast.LENGTH_LONG).show()
finish()
}
}
Code: Select all
private fun setupSession() {
arFragment.planeDiscoveryController.hide()
arFragment.planeDiscoveryController.setInstructionView(null)
arSession = Session(this)
arConfig = Config(arSession)
setupImageDatabase {
arConfig?.setAugmentedImageDatabase(augmentedImageDatabase)
arSession?.configure(arConfig)
handler.post { Toast.makeText(this, "Database Sync Completed", Toast.LENGTH_SHORT).show() }
}
arConfig?.setFocusMode(Config.FocusMode.AUTO)
arConfig?.planeFindingMode = Config.PlaneFindingMode.DISABLED
arConfig?.imageStabilizationMode = Config.ImageStabilizationMode.OFF
arConfig?.setUpdateMode(Config.UpdateMode.LATEST_CAMERA_IMAGE)
arSession?.configure(arConfig)
arFragment.arSceneView?.setupSession(arSession)
}
Code: Select all
override fun onUpdate(frameTime: FrameTime?) {
val frame = arFragment.arSceneView?.arFrame ?: return
val images = frame.getUpdatedTrackables(AugmentedImage::class.java)
for (image in images) {
when (image.trackingState) {
TrackingState.TRACKING -> {
if (!trackedImages.contains(image.name)) {
handleDetectedImage(image)
trackedImages.add(image.name)
}
}
TrackingState.PAUSED -> {
// Remove tracking if the image is no longer visible
trackedImages.remove(image.name)
runOnUiThread {
Toast.makeText(this, "Tracking lost for ${image.name}", Toast.LENGTH_SHORT).show()
}
}
TrackingState.STOPPED -> {
// Clear the image from tracking
trackedImages.remove(image.name)
}
}
}
}
< /code>
verifiziert, dass ich den TrackingState in der Frame -Update -Schleife ordnungsgemäß aktualisiere und höre. behält an.override fun onUpdate(frameTime: FrameTime?) {
val frame = arFragment.arSceneView?.arFrame ?: return
val images = frame.getUpdatedTrackables(AugmentedImage::class.java)
for (image in images) {
when (image.trackingState) {
TrackingState.TRACKING -> {
if (!trackedImages.contains(image.name)) {
handleDetectedImage(image)
trackedImages.add(image.name)
}
}
TrackingState.PAUSED -> {
// Remove tracking if the image is no longer visible
trackedImages.remove(image.name)
runOnUiThread {
Toast.makeText(this, "Tracking lost for ${image.name}", Toast.LENGTH_SHORT).show()
}
}
TrackingState.STOPPED -> {
// Clear the image from tracking
trackedImages.remove(image.name)
}
}
}
}
Wenn die Kamera nicht mehr auf das verfolgte Bild zeigt, sollte sich der TrackingState in die Pause ändern oder anhalten, anstatt im Tracking -Status zu bleiben.>