Как сбросить ARCore?

Есть ли способ сбросить ARCore Android SDK?

Я обнаружил, что в Unity мы можем вызвать метод сброса для сеанса ARCore. Я попытался закрыть сессию, но она разбилась. Я попытался перезапустить Activity, он работает, но на некоторых телефонах он снова вылетает.

Пожалуйста помоги.


person Nomore 7    schedule 29.11.2019    source источник


Ответы (1)


Если вам нужно сбросить сеанс ARCore с помощью Kotlin для Android SDK, используйте следующие три метода в определенной последовательности:

.pause()       // Pauses ARCore session

.close()       // Releases resources used by an ARCore session 

.resume()      // Starts or resumes the ARCore session

Давайте посмотрим, какая официальная документация говорит о методе close():

Метод close() займет несколько секунд.

Чтобы предотвратить блокировку основного потока, вызовите pause() в основном потоке, а затем вызовите close() в фоновом потоке. Небезопасно вызывать методы этого сеанса или других объектов, полученных из этого сеанса, во время закрытия сеанса и после закрытия сеанса.

Фрагмент для закрытия сеанса может выглядеть так:

import kotlinx.coroutines.*

public override fun onRestart() {
    super.onRestart()

    if (session != null) {

        GlobalScope.launch {     // launch a new coroutine in BG and continue
            delay(2000L)         // non-blocking delay for 2 sec
            session!!.close()
            println("Closing...")
        }
        session!!.pause()
        println("Paused...")     // main thread continues while coroutine's delayed
        Thread.sleep(2000L)      // block main thread for 2 sec to keep JVM alive
    }
}

Фрагмент для повторного запуска сеанса может выглядеть так:

public override fun onStart() {
    super.onStart()
        
    try {
        session!!.resume()

    } catch (e: Exception) { 
        session = null
        return
    }
}
person Andy Fedoroff    schedule 06.02.2020