android - 使用 Ar 核心时出现定位服务错误
问题描述
我有一个 Ar 对象,它放置在屏幕底部,并且会随着相机的移动而移动,但一段时间后出现错误,指出 E/ARCore-LocationProvider:FLP api 客户端构建期间出现异常:com.google.android.gms.common .api.GoogleApiClient java.lang.ClassNotFoundException: com.google.android.gms.common.api.GoogleApiClient
我不知道为什么会这样,因为我没有使用任何基于位置的服务
这是完整的错误:
E/ARCore-LocationProvider: Exception during FLP api client construction: com.google.android.gms.common.api.GoogleApiClient
java.lang.ClassNotFoundException: com.google.android.gms.common.api.GoogleApiClient
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at com.google.ar.core.services.LocationProvider.loadClass(PG:74)
at com.google.ar.core.services.LocationProvider.<init>(PG:11)
at com.google.ar.core.Session.nativeCreateSessionAndWrapperWithFeatures(Native Method)
at com.google.ar.core.Session.<init>(Session.java:14)
at com.google.ar.sceneform.ux.BaseArFragment.createSessionWithFeatures(BaseArFragment.java:419)
at com.google.ar.sceneform.ux.BaseArFragment.createSession(BaseArFragment.java:405)
at com.google.ar.sceneform.ux.BaseArFragment.initializeSession(BaseArFragment.java:379)
at com.google.ar.sceneform.ux.BaseArFragment.onResume(BaseArFragment.java:338)
at androidx.fragment.app.Fragment.performResume(Fragment.java:2498)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1501)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
at androidx.fragment.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:3241)
at androidx.fragment.app.FragmentController.dispatchResume(FragmentController.java:223)
at androidx.fragment.app.FragmentActivity.onResumeFragments(FragmentActivity.java:538)
at androidx.fragment.app.FragmentActivity.onPostResume(FragmentActivity.java:527)
at androidx.appcompat.app.AppCompatActivity.onPostResume(AppCompatActivity.java:172)
at android.app.Activity.performResume(Activity.java:7977)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4312)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4354)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2109)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.api.GoogleApiClient" on path: DexPathList[[zip file "/data/app/com.example.arrings-Z2Bc9Z5oOudX5Z9PhFYHZQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.arrings-Z2Bc9Z5oOudX5Z9PhFYHZQ==/lib/arm64, /data/app/com.example.arrings-Z2Bc9Z5oOudX5Z9PhFYHZQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system/product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at com.google.ar.core.services.LocationProvider.loadClass(PG:74)
at com.google.ar.core.services.LocationProvider.<init>(PG:11)
at com.google.ar.core.Session.nativeCreateSessionAndWrapperWithFeatures(Native Method)
at com.google.ar.core.Session.<init>(Session.java:14)
at com.google.ar.sceneform.ux.BaseArFragment.createSessionWithFeatures(BaseArFragment.java:419)
at com.google.ar.sceneform.ux.BaseArFragment.createSession(BaseArFragment.java:405)
at com.google.ar.sceneform.ux.BaseArFragment.initializeSession(BaseArFragment.java:379)
at com.google.ar.sceneform.ux.BaseArFragment.onResume(BaseArFragment.java:338)
at androidx.fragment.app.Fragment.performResume(Fragment.java:2498)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1501)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
at androidx.fragment.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:3241)
at androidx.fragment.app.FragmentController.dispatchResume(FragmentController.java:223)
at androidx.fragment.app.FragmentActivity.onResumeFragments(FragmentActivity.java:538)
at androidx.fragment.app.FragmentActivity.onPostResume(FragmentActivity.java:527)
at androidx.appcompat.app.AppCompatActivity.onPostResume(AppCompatActivity.java:172)
at android.app.Activity.performResume(Activity.java:7977)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4312)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4354)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2109)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
2020-05-11 12:04:39.708 7568-7568/com.example.arrings E/ARCore-LocationProvider: Can't find FLP class: com.google.android.gms.location.LocationServices
java.lang.ClassNotFoundException: com.google.android.gms.location.LocationServices
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at com.google.ar.core.services.LocationProvider.loadClass(PG:74)
at com.google.ar.core.services.LocationProvider.isLocationLibraryLinked(PG:60)
at com.google.ar.core.Session.nativeCreateSessionAndWrapperWithFeatures(Native Method)
at com.google.ar.core.Session.<init>(Session.java:14)
at com.google.ar.sceneform.ux.BaseArFragment.createSessionWithFeatures(BaseArFragment.java:419)
at com.google.ar.sceneform.ux.BaseArFragment.createSession(BaseArFragment.java:405)
at com.google.ar.sceneform.ux.BaseArFragment.initializeSession(BaseArFragment.java:379)
at com.google.ar.sceneform.ux.BaseArFragment.onResume(BaseArFragment.java:338)
at androidx.fragment.app.Fragment.performResume(Fragment.java:2498)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1501)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
at androidx.fragment.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:3241)
at androidx.fragment.app.FragmentController.dispatchResume(FragmentController.java:223)
at androidx.fragment.app.FragmentActivity.onResumeFragments(FragmentActivity.java:538)
at androidx.fragment.app.FragmentActivity.onPostResume(FragmentActivity.java:527)
at androidx.appcompat.app.AppCompatActivity.onPostResume(AppCompatActivity.java:172)
at android.app.Activity.performResume(Activity.java:7977)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4312)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4354)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2109)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.location.LocationServices" on path: DexPathList[[zip file "/data/app/com.example.arrings-Z2Bc9Z5oOudX5Z9PhFYHZQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.arrings-Z2Bc9Z5oOudX5Z9PhFYHZQ==/lib/arm64, /data/app/com.example.arrings-Z2Bc9Z5oOudX5Z9PhFYHZQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system/product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at com.google.ar.core.services.LocationProvider.loadClass(PG:74)
at com.google.ar.core.services.LocationProvider.isLocationLibraryLinked(PG:60)
at com.google.ar.core.Session.nativeCreateSessionAndWrapperWithFeatures(Native Method)
at com.google.ar.core.Session.<init>(Session.java:14)
at com.google.ar.sceneform.ux.BaseArFragment.createSessionWithFeatures(BaseArFragment.java:419)
at com.google.ar.sceneform.ux.BaseArFragment.createSession(BaseArFragment.java:405)
at com.google.ar.sceneform.ux.BaseArFragment.initializeSession(BaseArFragment.java:379)
at com.google.ar.sceneform.ux.BaseArFragment.onResume(BaseArFragment.java:338)
at androidx.fragment.app.Fragment.performResume(Fragment.java:2498)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1501)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
at androidx.fragment.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:3241)
at androidx.fragment.app.FragmentController.dispatchResume(FragmentController.java:223)
at androidx.fragment.app.FragmentActivity.onResumeFragments(FragmentActivity.java:538)
at androidx.fragment.app.FragmentActivity.onPostResume(FragmentActivity.java:527)
at androidx.appcompat.app.AppCompatActivity.onPostResume(AppCompatActivity.java:172)
at android.app.Activity.performResume(Activity.java:7977)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4312)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4354)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2109)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
2020
这件事也发生在崩溃之前
camera_image_stream.cc:230 Camera Image Stream failed to dequeue Image from ImageReader. status=UNAVAILABLE: AImageReader_acquireLatestImage [type.googleapis.com/util.ErrorSpacePayload='ImageReaderStatusErrorSpaceClass::AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE'] acquired_image_count=9
2020-05-11 12:05:12.837 7568-7678/com.example.arrings E/native: camera_image_stream.cc:230 Camera Image Stream failed to dequeue Image from ImageReader. status=UNAVAILABLE: AImageReader_acquireLatestImage [type.googleapis.com/util.ErrorSpacePayload='ImageReaderStatusErrorSpaceClass::AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE'] acquired_image_count=9
2020-05-11 12:05:12.837 7568-7678/com.example.arrings E/native: camera_image_stream.cc:230 Camera Image Stream failed to dequeue Image from ImageReader. status=UNAVAILABLE: AImageReader_acquireLatestImage [type.googleapis.com/util.ErrorSpacePayload='ImageReaderStatusErrorSpaceClass::AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE'] acquired_image_count=9
这是我正在使用的代码:\
private lateinit var arFragment: ArFragment
private var renderable: ModelRenderable? = null
private val mCameraRelativePose = Pose.makeTranslation(0.0f, -0.39f, -0.55f)
private var oldAnchor: Anchor? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
arFragment = ar_fragment as ArFragment
arFragment.planeDiscoveryController.hide()
arFragment.arSceneView.planeRenderer.isVisible = false
arFragment.planeDiscoveryController.setInstructionView(null)
arFragment.arSceneView.scene.addOnUpdateListener { frameTime ->
arFragment.onUpdate(frameTime)
addNodeToScene()
}
//arFragment.setOnTapArPlaneListener { _, _, _ -> }
placeObject()
}
/**
* @param fragment our fragment
* @param anchor ARCore anchor from the hit test
* @param model our 3D model of choice
*
* Uses the ARCore anchor from the hitTest result and builds the Sceneform nodes.
* It starts the asynchronous loading of the 3D model using the ModelRenderable builder.
*/
private fun placeObject() {
ModelRenderable.builder()
.setSource(arFragment.context, R.raw.rings)
.build()
.thenAccept {
renderable?.isShadowCaster = false
renderable?.isShadowReceiver = false
renderable = it
}
.exceptionally {
Toast.makeText(this@MainActivity, "Error", Toast.LENGTH_SHORT).show()
return@exceptionally null
}
}
/**
* @param fragment our fragment
* @param anchor ARCore anchor
* @param renderable our model created as a Sceneform Renderable
*
* This method builds two nodes and attaches them to our scene
* The Anchor nodes is positioned based on the pose of an ARCore Anchor. They stay positioned in the sample place relative to the real world.
* The Transformable node is our Model
* Once the nodes are connected we select the TransformableNode so it is available for interactions
*/
private fun addNodeToScene() {
val frame = arFragment.arSceneView.arFrame ?: return
val pose =
frame.camera?.displayOrientedPose?.compose(mCameraRelativePose)?.extractTranslation()
if (frame.camera?.trackingState == TrackingState.TRACKING) {
val anchor = arFragment.arSceneView.session?.createAnchor(pose)
anchor?.pose?.toMatrix(FloatArray(16), 0)
if (oldAnchor != null) {
oldAnchor?.detach()
}
oldAnchor = anchor
val anchorNode = AnchorNode(anchor)
anchorNode.isSmoothed = true
anchorNode.setParent(arFragment.arSceneView.scene)
// TransformableNode means the user to move, scale and rotate the model
val transformableNode = TransformableNode(arFragment.transformationSystem)
transformableNode.renderable = renderable // have to add position and angel here naaa
transformableNode.setParent(anchorNode)
transformableNode.select()
}
}
解决方案
我对 LocationProvider 有类似的问题,我没有在我的应用程序中使用位置。意外地将图像添加到增强图像数据库中时,我使用的名称为空。
AugmentedImageDatabase augmentedImageDatabase = new AugmentedImageDatabase(session);
augmentedImageDatabase.addImage(name /*was null*/, bitmap, size);
推荐阅读
- python - 基于更新数据的预测
- r - 在 r 中绘图 - 删除和重命名标题和标签
- python - ssd_mobilenet 损失不能下降
- ios - 为什么我们需要将 Swift 类标记为 `public` 或 `open` 以使其在 Objective-C 框架项目中可访问?
- applescript - 创建 Automator 文件夹操作以根据文件名的一部分自动创建目录,然后移动到服务器上的新目录
- python - 使用 SQLAlchemy 作为 Python 的 ORM - 关系不存在
- r - 如何将带有希伯来语字段的 RData 文件加载到画面中
- keycloak - Keyclock 与用户组共享资源
- windows - 加密服务提供者签名过程
- java - 反序列化没有默认构造函数的 JSON