使用unity实现AndroidJavaClass

使用unity实现AndroidJavaClass,java,unity3d,Java,Unity3d,我有一个java对象,它获取一个侦听器对象作为参数。这个监听器应该实现某个java抽象类 我正试图阻止用java写这篇文章,因为我使用jar文件中的SDK,要从java文件调用jar文件,我需要创建一个包含这两个文件的jar文件(请参阅) 这个答案解释了我的错误,但没有给出解决方案。 我将尝试更详细地介绍: 我得到了Listener类(在jar文件中): 公共抽象类AttachCallback{ 公共附件回调(); 公共连接(Sdk); } 我的c#代码当前是(并且不起作用): 公共类Att

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

我正试图阻止用java写这篇文章,因为我使用jar文件中的SDK,要从java文件调用jar文件,我需要创建一个包含这两个文件的jar文件(请参阅)

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

我将尝试更详细地介绍: 我得到了Listener类(在jar文件中):

公共抽象类AttachCallback{
公共附件回调();
公共连接(Sdk);
}
我的c#代码当前是(并且不起作用):

公共类AttachCallback:AndroidJavaProxy
{
public AttachCallback():base(“com.example.AttachCallback”)
{
}
公共连接(AndroidJavaObject sdk)
{
Debug.Log(“----附件----”);
}
}
目前,我得到
java.lang.IllegalArgumentException:com.example.AttachCallback不是一个接口

那么,有没有办法做到这一点? 提前感谢,, Chaim首先:读一下这个。Android Java代理只能实现接口。所以您应该用java创建接口。比如:

public interface IAttachable
{
    public void onAttached(Sdk sdk);
}
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);
        }
    }
}
在AttachCallback类中,可以添加如下接口:

public abstract class AttachCallback implements IAttachable {
    public IAttachable unityCallback;
    public void onAttached(String sdk) 
    {
        unityCallback.onAttached(sdk);
    }
}
然后在unity类中,创建JavaProxy

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

    public void onAttached(AndroidJavaObject sdk)
    {
      Debug.Log("-----Attached------");
    }
}
要连接Unity代理,应将AttachCallback传递给java,类似于:

public interface IAttachable
{
    public void onAttached(Sdk sdk);
}
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);
        }
    }
}