You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测设备上是否已安装ARCore lib/apk?

嘿,这个问题我帮不少开发者处理过!要检测设备上是否安装了ARCore,其实分两种常见场景,我给你拆解清楚:

1. 直接检测ARCore服务APK是否存在

ARCore的官方服务包名是固定的com.google.ar.core,你可以通过Android系统的PackageManager来直接检查该APK是否已安装:

Java示例代码

import android.content.pm.PackageManager;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        boolean isARCoreInstalled = checkARCoreApkExists();
        // 根据检测结果做后续逻辑处理
    }

    private boolean checkARCoreApkExists() {
        try {
            getPackageManager().getPackageInfo("com.google.ar.core", PackageManager.GET_META_DATA);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return false;
        }
    }
}

Kotlin示例代码

import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        val isARCoreInstalled = checkARCoreApkExists()
        // 处理检测结果
    }

    private fun checkARCoreApkExists(): Boolean {
        return try {
            packageManager.getPackageInfo("com.google.ar.core", PackageManager.GET_META_DATA)
            true
        } catch (e: PackageManager.NameNotFoundException) {
            e.printStackTrace()
            false
        }
    }
}
2. 更推荐:用ARCore官方API做全面检测

如果你的目标是开发AR应用,只检测APK是否安装远远不够——你还需要确认设备是否兼容ARCore、已安装的ARCore版本是否满足应用要求。官方推荐用ArCoreApk类来做一站式检测:

首先在你的app/build.gradle中添加ARCore依赖(替换为最新稳定版):

dependencies {
    implementation 'com.google.ar:core:1.40.0'
}

Java示例代码

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.google.ar.core.ArCoreApk;
import com.google.ar.core.exceptions.UnavailableUserDeclinedInstallationException;

public class MainActivity extends AppCompatActivity {
    private boolean mUserRequestedInstall = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        checkARCoreStatus();
    }

    private void checkARCoreStatus() {
        ArCoreApk.Availability availability = ArCoreApk.getInstance().checkAvailability(this);
        switch (availability) {
            case SUPPORTED_INSTALLED:
                // 设备兼容且ARCore已正常安装
                break;
            case SUPPORTED_APK_TOO_OLD:
                // ARCore已安装但版本过低,请求更新
                try {
                    ArCoreApk.getInstance().requestInstall(this, true);
                } catch (UnavailableUserDeclinedInstallationException e) {
                    // 用户拒绝更新,可提示引导
                }
                break;
            case SUPPORTED_NOT_INSTALLED:
                // 设备兼容但未安装ARCore,请求安装
                try {
                    ArCoreApk.getInstance().requestInstall(this, mUserRequestedInstall);
                    mUserRequestedInstall = true;
                } catch (UnavailableUserDeclinedInstallationException e) {
                    // 用户拒绝安装,可做降级处理
                }
                break;
            case UNSUPPORTED_DEVICE_NOT_CERTIFIED:
            case UNSUPPORTED_ARCORE_NOT_INSTALLED:
                // 设备不兼容ARCore,无法使用AR功能
                break;
        }
    }
}

Kotlin示例代码

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.google.ar.core.ArCoreApk
import com.google.ar.core.exceptions.UnavailableUserDeclinedInstallationException

class MainActivity : AppCompatActivity() {
    private var userRequestedInstall = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        checkARCoreStatus()
    }

    private fun checkARCoreStatus() {
        val availability = ArCoreApk.getInstance().checkAvailability(this)
        when (availability) {
            ArCoreApk.Availability.SUPPORTED_INSTALLED -> {
                // 设备兼容且ARCore已正常安装
            }
            ArCoreApk.Availability.SUPPORTED_APK_TOO_OLD -> {
                // ARCore版本过低,请求更新
                try {
                    ArCoreApk.getInstance().requestInstall(this, true)
                } catch (e: UnavailableUserDeclinedInstallationException) {
                    // 用户拒绝更新,做对应提示
                }
            }
            ArCoreApk.Availability.SUPPORTED_NOT_INSTALLED -> {
                // 设备兼容但未安装ARCore,请求安装
                try {
                    ArCoreApk.getInstance().requestInstall(this, userRequestedInstall)
                    userRequestedInstall = true
                } catch (e: UnavailableUserDeclinedInstallationException) {
                    // 用户拒绝安装,做降级处理
                }
            }
            ArCoreApk.Availability.UNSUPPORTED_DEVICE_NOT_CERTIFIED,
            ArCoreApk.Availability.UNSUPPORTED_ARCORE_NOT_INSTALLED -> {
                // 设备不兼容ARCore,无法使用AR功能
            }
        }
    }
}

额外注意

  • 如果你只是单纯想确认APK是否存在,第一种方法足够;但开发AR应用时,强烈推荐第二种方式,它能覆盖兼容性、版本过低等所有边缘情况。
  • ARCore服务的包名com.google.ar.core是固定的,不要写错。

内容的提问来源于stack exchange,提问作者toto_tata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:39:16