首页 > 解决方案 > 我正在尝试在 Xamarin Android 中使用 Google ARCore sceneform SDK。但我在“ModelRenderable.InvokeBuilder().SetSource()”方法中遇到错误

问题描述

我正在尝试在 Xamarin Android 中使用 Google ARCore sceneform SDK。但我收到错误:

Java.Lang.NoSuchMethodError: '没有非静态方法 "Lcom/google/ar/sceneform/rendering/ModelRenderable$Builder;.setSource(Landroid/content/Context;I)Ljava/lang/Object;"'

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        Xamarin.Essentials.Platform.Init(this, savedInstanceState);

        if (!CheckIsSupportedDeviceOrFinish(this))
        {
            return;
        }

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);

        int requestPermissions=0;
        string cameraPermission = Android.Manifest.Permission.Camera;

        if (!(ContextCompat.CheckSelfPermission(this, cameraPermission) == (int)Permission.Granted))
        {
            ActivityCompat.RequestPermissions(this, new String[] { cameraPermission, }, requestPermissions);
        }

        arFragment = (ArFragment)SupportFragmentManager.FindFragmentById(Resource.Id.ux_fragment);

        ModelRenderable.InvokeBuilder().SetSource(this, Resource.Raw.andy).Build(((renderable) =>
        {
            andyRenderable = renderable;

        }));

        //add the event handler
        arFragment.TapArPlane += OnTapArPlane;

标签: xamarinxamarin.androidarcoresceneform

解决方案


你应该尝试Java反射......它对我有用。

var builder = ModelRenderable.InvokeBuilder();
    
var javaClass = Java.Lang.Class.FromType(builder.GetType());
var method = javaClass.GetMethod("setSource", Class.FromType(renderableDefinition.GetType()));
method.Invoke(builder, renderableDefinition);

var future = builder.Build();
var model = future.Get();

推荐阅读