【问题标题】:AR Core is not working in flutter on basic tutorialAR Core 在基本教程中无法正常工作
【发布时间】:2021-01-04 22:20:48
【问题描述】:

您好,我想构建使用 AR Core 的颤振应用程序。这是我在 Flutter 中的第一个应用程序和第一个移动应用程序。

我有来自 Flutter 的示例应用模板

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:arcore_flutter_plugin/arcore_flutter_plugin.dart';
import 'package:vector_math/vector_math_64.dart' as vector;

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'AR Translator',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'AR Translator'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
...
}

我想在哪里添加按钮,用 AR Core 打开新窗口

ElevatedButton(
              onPressed: () {
                Navigator.push(context,
                    MaterialPageRoute(builder: (context) => LiveTranslate()));
              },
              child: Text("Live translator"),
              style: ElevatedButton.styleFrom(
                  minimumSize: Size(250, 35),
                  textStyle: TextStyle(
                    fontSize: 20,
                  )),
            ),

这个按钮在 Widged build() 中返回 Scaffold 在 body 中心子列中,其中是一个字段 children: &lt;Widget&gt;[..., ElevatedButton(), ...]。 我在这个tutorial上写了一个基本的小部件

class LiveTranslate extends StatefulWidget {
  LiveTranslate({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _LiveTranslate createState() => _LiveTranslate();
}

class _LiveTranslate extends State<LiveTranslate> {
  ArCoreController arCoreController;

  _onArCoreViewCreated(ArCoreController _arcoreController) {
    arCoreController = _arcoreController;
    _addSphere(arCoreController);
  }

  _addSphere(ArCoreController _arCoreController) {
    final material = ArCoreMaterial(color: Colors.deepOrange);
    final sphere = ArCoreSphere(materials: [material], radius: 0.2);
    final node = ArCoreNode(
      shape: sphere,
      position: vector.Vector3(0, 0, -1),
    );

    _arCoreController.addArCoreNode(node);
  }

  @override
  void dispose() {
    arCoreController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Live Translate"),
      ),
      body: ArCoreView(
        onArCoreViewCreated: _onArCoreViewCreated,
      ),
    );
  }
}

但是当我点击按钮时,我得到一个空白页面,我在调试控制台中有这个

Launching lib\main.dart on Android SDK built for x86 in debug mode...
 lib\main.dart
√ Built build\app\outputs\flutter-apk\app-debug.apk.
Connecting to VM Service at ws://127.0.0.1:55289/Rq7xt3Irrow=/ws
D/EGL_emulation(10219): eglMakeCurrent: 0xe6d40600: ver 2 0 (tinfo 0xc7701200)
D/eglCodecCommon(10219): setVertexArrayObject: set vao to 0 (0) 1 0
E/EGL_emulation(10219): tid 10219: eglCreateContext(1478): error 0x3005 (EGL_BAD_CONFIG)
E/EGL_emulation(10219): tid 10219: eglGetConfigAttrib(1019): error 0x3005 (EGL_BAD_CONFIG)
I/chatty  (10219): uid=10134(com.example.ar_translator) identical 3 lines
E/EGL_emulation(10219): tid 10219: eglGetConfigAttrib(1019): error 0x3005 (EGL_BAD_CONFIG)
E/EGL_emulation(10219): tid 10219: eglCreatePbufferSurface(1065): error 0x3005 (EGL_BAD_CONFIG)
I/Filament(10219): FEngine (32 bits) created at 0xbf481800 (threading is enabled)
D/Filament(10219): Using ASurfaceTexture
D/Filament(10219): FEngine resolved backend: OpenGL
D/HostConnection(10219): HostConnection::get() New Host Connection established 0xc790cb60, tid 10328
W/Gralloc3(10219): allocator 3.x is not supported
D/HostConnection(10219): HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_vulkan ANDROID_EMU_deferred_vulkan_commands ANDROID_EMU_vulkan_null_optional_strings ANDROID_EMU_vulkan_create_resources_with_requirements ANDROID_EMU_YUV420_888_to_NV21 ANDROID_EMU_YUV_Cache ANDROID_EMU_async_unmap_buffer ANDROID_EMU_vulkan_free_memory_sync ANDROID_EMU_vulkan_shader_float16_int8 ANDROID_EMU_vulkan_async_queue_submit GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_2
E/Filament(10219): eglChooseConfig failed with unknown
E/flutter (10219): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: PlatformException(error, java.lang.IllegalStateException: Couldn't create Engine
E/flutter (10219):  at com.google.android.filament.Engine.create(Engine.java:67)
E/flutter (10219):  at com.google.ar.sceneform.rendering.EngineInstance.createEngine(EngineInstance.java:85)
E/flutter (10219):  at com.google.ar.sceneform.rendering.EngineInstance.getEngine(EngineInstance.java:39)
E/flutter (10219):  at com.google.ar.sceneform.rendering.Renderer.initialize(Renderer.java:505)
E/flutter (10219):  at com.google.ar.sceneform.rendering.Renderer.<init>(Renderer.java:106)
E/flutter (10219):  at com.google.ar.sceneform.SceneView.initialize(SourceFile:78)
E/flutter (10219):  at com.google.ar.sceneform.SceneView.<init>(SourceFile:10)
E/flutter (10219):  at com.google.ar.sceneform.ArSceneView.<init>(SourceFile:1)
E/flutter (10219):  at com.difrancescogianmarco.arcore_flutter_plugin.ArCoreView.<init>(ArCoreView.kt:53)
E/flutter (10219):  at com.difrancescogianmarco.arcore_flutter_plugin.ArCoreViewFactory.create(ArCoreViewFactory.kt:30)
E/flutter (10219):  at io.flutter.plugin.platform.SingleViewPresentation.onCreate(SingleViewPresentation.java:186)
E/flutter (10219):  at android.app.Dialog.dispatchOnCreate(Dialog.java:421)
E/flutter (10219):  at android.app.Dialog.show(Dialog.java:315)
E/flutter (10219):  at android.app.Presentation.show(Presentation.java:250)
E/flutter (10219):  at io.flutter.plugin.platform.VirtualDisplayController.<init>(VirtualDisplayController.java:95)
E/flutter (10219):  at io.flutter.plugin.platform.VirtualDisplayController.create(VirtualDisplayController.java:48)
E/flutter (10219):  at io.flutter.plugin.platform.PlatformViewsController$1.createVirtualDisplayForPlatformView(PlatformViewsController.java:207)
E/flutter (10219):  at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.create(PlatformViewsChannel.java:104)
E/flutter (10219):  at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.onMethodCall(PlatformViewsChannel.java:59)
E/flutter (10219):  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/flutter (10219):  at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/flutter (10219):  at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/flutter (10219):  at android.os.MessageQueue.nativePollOnce(Native Method)
E/flutter (10219):  at android.os.MessageQueue.next(MessageQueue.java:336)
E/flutter (10219):  at android.os.Looper.loop(Looper.java:174)
E/flutter (10219):  at android.app.ActivityThread.main(ActivityThread.java:7356)
E/flutter (10219):  at java.lang.reflect.Method.invoke(Native Method)
E/flutter (10219):  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/flutter (10219):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
E/flutter (10219): , null, null)
[38;5;244mE/flutter (10219): #0      StandardMethodCodec.decodeEnvelope[39;49m
 package:flutter/…/services/message_codecs.dart
[38;5;244mE/flutter (10219): #1      MethodChannel._invokeMethod[39;49m
 package:flutter/…/services/platform_channel.dart
E/flutter (10219): <asynchronous suspension>
[38;5;244mE/flutter (10219): #2      MethodChannel.invokeMethod[39;49m
 package:flutter/…/services/platform_channel.dart
[38;5;244mE/flutter (10219): #3      TextureAndroidViewController._sendCreateMessage[39;49m
 package:flutter/…/services/platform_views.dart
[38;5;244mE/flutter (10219): #4      AndroidViewController.create[39;49m
 package:flutter/…/services/platform_views.dart
[38;5;244mE/flutter (10219): #5      TextureAndroidViewController.create[39;49m
 package:flutter/…/services/platform_views.dart
[38;5;244mE/flutter (10219): #6      TextureAndroidViewController.setSize[39;49m
 package:flutter/…/services/platform_views.dart
[38;5;244mE/flutter (10219): #7      RenderAndroidView._sizePlatformView[39;49m
 package:flutter/…/rendering/platform_view.dart
[38;5;244mE/flutter (10219): #8      RenderAndroidView.performResize[39;49m
 package:flutter/…/rendering/platform_view.dart
[38;5;244mE/flutter (10219): #9      RenderObject.layout[39;49m
 package:flutter/…/rendering/object.dart
[38;5;244mE/flutter (10219): #10     RenderProxyBoxMixin.performLayout[39;49m
 package:flutter/…/rendering/proxy_box.dart
[38;5;244mE/flutter (10219): #11     RenderObject.layout[39;49m
 package:flutter/…/rendering/object.dart
[38;5;244mE/flutter (10219): #12     MultiChildLayoutDelegate.layoutChild[39;49m
 package:flutter/…/rendering/custom_layout.dart
[38;5;244mE/flutter (10219): #13     _ScaffoldLayout.performLayout[39;49m
 package:flutter/…/material/scaffold.dart
[38;5;244mE/flutter (10219): #14     MultiChildLayoutDelegate._callPerformLayout[39;49m
 package:flutter/…/rendering/custom_layout.dart
[38;5;244mE/flutter (10219): #15     RenderCustomMultiChildLayoutBox.performLayout[39;49m
 package:flutter/…/rendering/custom_layout.dart
E/flutter (10219): #16     RenderObject.layout (pa

我哪里做错了? 我使用带有网络摄像头的安卓模拟器作为后置摄像头。

【问题讨论】:

标签: android flutter android-emulator arcore


【解决方案1】:

@MorrisonChang 但是当我使用VirtualScene 作为相机创建手机模拟器时,我仍然遇到一些错误,并且 AR Cor View 无法正常工作。这是设备描述:

Name: Pixel_4_API_29_2
CPU/ABI: Google Play Intel Atom (x86)
Path: C:\Users\me\.android\avd\Pixel_4_API_29_2.avd
Target: google_apis_playstore [Google Play] (API level 29)
Skin: pixel_4
SD Card: 512M
fastboot.chosenSnapshotFile: 
runtime.network.speed: full
hw.accelerometer: yes
hw.device.name: pixel_4
hw.lcd.width: 1080
hw.initialOrientation: Portrait
image.androidVersion.api: 29
tag.id: google_apis_playstore
hw.mainKeys: no
hw.camera.front: emulated
avd.ini.displayname: Pixel 4 API 29 2
hw.gpu.mode: auto
hw.ramSize: 1536
PlayStore.enabled: true
fastboot.forceColdBoot: no
hw.cpu.ncore: 4
hw.keyboard: yes
hw.sensors.proximity: yes
hw.dPad: no
hw.lcd.height: 2280
vm.heapSize: 256
skin.dynamic: yes
hw.device.manufacturer: Google
hw.gps: yes
hw.audioInput: yes
image.sysdir.1: system-images\android-29\google_apis_playstore\x86\
showDeviceFrame: yes
hw.camera.back: virtualscene
AvdId: Pixel_4_API_29_2
hw.lcd.density: 440
hw.arc: false
hw.device.hash2: MD5:6b5943207fe196d842659d2e43022e20
fastboot.forceChosenSnapshotBoot: no
fastboot.forceFastBoot: yes
hw.trackBall: no
hw.battery: yes
hw.sdCard: yes
tag.display: Google Play
runtime.network.latency: none
disk.dataPartition.size: 6442450944
hw.sensors.orientation: yes
avd.ini.encoding: UTF-8
hw.gpu.enabled: yes

我使用的是 Android 10.0。

编辑。最终解决方案。 我已经使用 android 10.0 在像素 4 上创建了基本的新设备。 从附加到虚拟设备的菜单中,我选择...(更多)并转到设置>高级,在OpenGL ES API level部分我更改为Renderer maximum (up to OpenGL ES 3.1). Also when I updated Google Play Services for AR I drag Google_Play_Services_for_AR_1.22.0_x86_for_emulator.apk`并放入虚拟设备。在此之后它工作。更重要的是,网络摄像头也可以工作,但太空中的物体不会留在原处。 为什么开始工作?我不知道。

【讨论】:

    猜你喜欢
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多