如何检测设备上是否已安装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
相关产品推荐
相关产品推荐

