Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gles2实时墙纸转换为c#(xamarin)符合错误“;。。。mono.android.TypeManager无法应用于_C#_Android_Opengl Es_Live Wallpaper_Xamarin - Fatal编程技术网

gles2实时墙纸转换为c#(xamarin)符合错误“;。。。mono.android.TypeManager无法应用于

gles2实时墙纸转换为c#(xamarin)符合错误“;。。。mono.android.TypeManager无法应用于,c#,android,opengl-es,live-wallpaper,xamarin,C#,Android,Opengl Es,Live Wallpaper,Xamarin,我正在尝试用c#中的xamarin编写android live墙纸。 为此,我将这里找到的服务代码转换为c: (此处直接跳到java实现:) 编译后,我得到错误: mono.android.TypeManager中的Activate(java.lang.String、java.lang.String、java.lang.Object、java.lang.Object[])不能应用于(java.lang.String、java.lang.String、com.[redacted].OpenGl

我正在尝试用c#中的xamarin编写android live墙纸。
为此,我将这里找到的服务代码转换为c:


(此处直接跳到java实现:)

编译后,我得到错误:

mono.android.TypeManager中的Activate(java.lang.String、java.lang.String、java.lang.Object、java.lang.Object[])不能应用于(java.lang.String、java.lang.String、com.[redacted].OpenGles2WallperService.OpenGles2WallperService_OpenGLES2Engine、java.lang.Object[])mono.android.TypeManager.Activate(“com.[redacted].opengles2wallperservice/OpenGLES2Engine,GameUtilClassLibrary,Version=1.0.0,Culture=neutral,PublicKeyToken=null,“com.[redacted].wallperserviceutil.opengles2wallperservice,GameUtilClassLibrary,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”,这是新的java.lang.Object[]{opengles2wallpersservice.this});D:\[redacted]\obj\Debug\android\src\com\[redacted]\wallperviceutil\opengles2wallperservice.java
这是我的c#实现。。。抱歉,篇幅太长:

public abstract class GLWallpaperService : WallpaperService
{
    public class GLEngine : Engine
    {
        private readonly GLWallpaperService outerInstance;

        public GLEngine(GLWallpaperService outerInstance) : base(outerInstance)
        {
            this.outerInstance = outerInstance;
        }

        internal class WallpaperGLSurfaceView : GLSurfaceView
        {
            private readonly GLWallpaperService.GLEngine outerInstance;
            ISurfaceHolder _surfaceHolder;

            internal WallpaperGLSurfaceView(GLWallpaperService.GLEngine outerInstance, Context context, ISurfaceHolder surfaceHolder)
                : base(context)
            {
                this.outerInstance = outerInstance;
                _surfaceHolder = surfaceHolder;
            }

            public override ISurfaceHolder Holder
            {
                get
                {
                    return _surfaceHolder;
                }
            }

            public virtual void OnDestroy()
            {
                base.OnDetachedFromWindow();
            }
        }

        private WallpaperGLSurfaceView glSurfaceView;
        private bool rendererHasBeenSet;

        public override void OnCreate(ISurfaceHolder surfaceHolder)
        {
            base.OnCreate(surfaceHolder);

            glSurfaceView = new WallpaperGLSurfaceView(this, outerInstance, surfaceHolder);
        }

        public override void OnVisibilityChanged(bool visible)
        {
            base.OnVisibilityChanged(visible);

            if (rendererHasBeenSet)
            {
                if (visible)
                {
                    glSurfaceView.OnResume();
                }
                else
                {
                    if (!IsPreview)
                    {
                        glSurfaceView.OnPause();
                    }
                }
            }
        }

        public override void OnDestroy()
        {
            base.OnDestroy();
            glSurfaceView.OnDestroy();
        }

        protected internal virtual Android.Opengl.GLSurfaceView.IRenderer NewRenderer//was just Renderer
        {
            set
            {
                glSurfaceView.SetRenderer(value);
                rendererHasBeenSet = true;
            }
        }

        protected internal virtual int EGLContextClientVersion
        {
            set
            {
                glSurfaceView.SetEGLContextClientVersion(value);
            }
        }
    }
}

public abstract class OpenGLES2WallpaperService : GLWallpaperService
{
    public override Engine OnCreateEngine()
    {
        return new OpenGLES2Engine(this);
    }

    internal class OpenGLES2Engine : GLWallpaperService.GLEngine
    {
        private readonly OpenGLES2WallpaperService outerInstance;

        public OpenGLES2Engine(OpenGLES2WallpaperService outerInstance)
            : base(outerInstance)
        {
            this.outerInstance = outerInstance;
        }

        public override void OnCreate(ISurfaceHolder surfaceHolder)
        {
            base.OnCreate(surfaceHolder);

            // Check if the system supports OpenGL ES 2.0.
            //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
            //ORIGINAL LINE: final android.app.ActivityManager activityManager = (android.app.ActivityManager) getSystemService(android.content.Context.ACTIVITY_SERVICE);
            ActivityManager activityManager = (ActivityManager)outerInstance.GetSystemService(Context.ActivityService);
            //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
            //ORIGINAL LINE: final android.content.pm.ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
            ConfigurationInfo configurationInfo = activityManager.DeviceConfigurationInfo;
            //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
            //ORIGINAL LINE: final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000;
            bool supportsEs2 = configurationInfo.ReqGlEsVersion >= 0x20000;

            if (supportsEs2)
            {
                // Request an OpenGL ES 2.0 compatible context.
                EGLContextClientVersion = 2;

                // Set the renderer to our user-defined renderer.
                NewRenderer = outerInstance.NewRenderer;//was just Renderer
            }
            else
            {
                // This is where you could create an OpenGL ES 1.x compatible
                // renderer if you wanted to support both ES 1 and ES 2.
                return;
            }
        }
    }

    internal abstract Android.Opengl.GLSurfaceView.IRenderer NewRenderer { get; }
}

public class LessonThreeWallpaperService : OpenGLES2WallpaperService
{
    internal override Android.Opengl.GLSurfaceView.IRenderer NewRenderer
    {
        get
        {
            return new LessonThreeRenderer(); // is a GLSurfaceView.IRenderer
        }
    }
}

我的目标是sdk版本8,并使用Visual Studio 2012。

非常感谢您的帮助。

这是我们的Android可调用包装器生成器代码中的一个错误:我们不能正确地支持C#中的“中间”非静态内部类。具体来说,
glwallperservice.Engine
正确生成,但
opengles2wallperservice.OpenGLES2Engine
不正确


请在提交一个bug。

这是我们的Android可调用包装生成器代码中的一个bug:我们不正确地支持C#中的“中间”非静态内部类。具体来说,
glwallperservice.Engine
正确生成,但
opengles2wallperservice.OpenGLES2Engine
不正确

请在上提交一个bug