【问题标题】:Using implement an AndroidJavaClass in unity统一使用实现 AndroidJavaClass
【发布时间】:2020-03-02 14:41:33
【问题描述】:

我有一个 java 对象,它获取一个侦听器对象作为参数。这个监听器应该实现某个java抽象类。

我试图阻止在 java 中编写它,因为我使用了一个 jar 文件中的 SDK,并且要从 java 文件调用 jar 文件,我需要创建一个包含它们的 jar 文件(见Unity3D with multiple jars (android jar + pure java lib)

这个答案解释了我的错误,但没有给出解决方案。 AndroidJavaProxy is not an interface

我会尽量详细一点: 我有 Listener 类(在 jar 文件中):

public abstract class AttachCallback {
  public AttachCallback();
  public void onAttached(Sdk sdk);
}

我的 c# 代码当前(并且不起作用):

public class AttachCallback : AndroidJavaProxy
{
    public AttachCallback() : base("com.example.AttachCallback")
    {
    }

    public void onAttached(AndroidJavaObject sdk)
    {
      Debug.Log("-----Attached------");
    }
}

目前,我收到java.lang.IllegalArgumentException: com.example.AttachCallback is not an interface

那么,有没有办法做到这一点? 提前致谢, 查姆

【问题讨论】:

    标签: java unity3d


    【解决方案1】:

    首先:阅读此article。 Android Java Proxy 只能实现接口。所以你应该在java中创建接口。比如:

    public interface IAttachable
    {
        public void onAttached(Sdk sdk);
    }
    

    在您的 AttachCallback 类中添加如下接口:

    public abstract class AttachCallback implements IAttachable {
        public IAttachable unityCallback;
        public void onAttached(String sdk) 
        {
            unityCallback.onAttached(sdk);
        }
    }
    

    然后在你的统一类中,创建 JavaProxy

    public class AttachCallback : AndroidJavaProxy
    {
        public AttachCallback() : base("com.example.IAttachable")
        {
        }
    
        public void onAttached(AndroidJavaObject sdk)
        {
          Debug.Log("-----Attached------");
        }
    }
    

    要附加您的 Unity 代理,您应该将 AttachCallback 传递给 java,例如:

    public void AddAttachToJava()
    {
        AttachCallback callback = new AttachCallback();
        //Passing to activity, but you can do whatever you want
        using (AndroidJavaClass javaClass = new AndroidJavaClass("your activity class name"))
        {
            using (AndroidJavaObject activity = javaClass.GetStatic<AndroidJavaObject>("mContext"))
            {
                activity.Call("attachUnityCallback", callback);
            }
        }
    }
    

    您在活动中的 java 方法应如下所示:

    public void attachUnityCallback(IAttachable attachable)
    {
        // if AttachCallback is created
        attachCallback.unityCallback = attachable;
        attachCallback.onAttached(sdk);
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多