Search code examples
androidarcore

ArCoreApk check availability not working on api 30


ArCoreApk check availability returns true on API Level 29 and below but false on 30. Any ideas?

fun checkArCoreAvailability(context: Context) {
    var message: String? = null
    var isArCoreInstalled = false
    try {
        when (ArCoreApk.getInstance().checkAvailability(context)) {
            ArCoreApk.Availability.UNKNOWN_ERROR -> {
                message = "This device does not support AR, starting normal session"
            }
            ArCoreApk.Availability.UNKNOWN_CHECKING -> {
                message = "This device does not support AR, starting normal session"
                Handler().postDelayed({
                    checkArCoreAvailability(context)
                }, 250)
            }
            ArCoreApk.Availability.UNKNOWN_TIMED_OUT -> {
                message = "This device does not support AR, starting normal session"
            }
            ArCoreApk.Availability.UNSUPPORTED_DEVICE_NOT_CAPABLE -> {
                message = "This device does not support AR, starting normal session"
            }
            ArCoreApk.Availability.SUPPORTED_NOT_INSTALLED -> {
                message = "Please install ArCore to use pinned annotations"
            }
            ArCoreApk.Availability.SUPPORTED_APK_TOO_OLD -> {
                message = "Please update ArCore to use pinned annotations"
            }
            ArCoreApk.Availability.SUPPORTED_INSTALLED -> {
                isArCoreInstalled = true
                message = "Starting AR Session"
            }
            null -> {
                message = "This device does not support AR, starting normal session"
            }
        }
    } catch (e: UnavailableArcoreNotInstalledException) {
        message = "Please install ARCore to use pinned annotations"
    } catch (e: UnavailableUserDeclinedInstallationException) {
        message = "Please install ARCore to use pinned annotations"
    } catch (e: UnavailableApkTooOldException) {
        message = "Please update ARCore to use pinned annotations"
    } catch (e: UnavailableSdkTooOldException) {
        message = "Please update this app"
    } catch (e: java.lang.Exception) {
        message = "This device does not support AR, starting normal session"
    }
    Toast.makeText(context, message, Toast.LENGTH_LONG).show()
}

Solution

  • Try to add appropriate query item to your manifest:

    <manifest>
        <queries>
            <package android:name="com.google.ar.core" />
        </queries>
    </manifest>