Hi,
We are developing a wrapper for an Android plugin. We are using the AndroidJavaProxy in a very straightforward way, and I hope that in the way the author intended.
In Java code, we have a list of IListeners:
private List<IPlayerListener> listeners;
public void addPlayerUpdates(IPlayerListener listener)
{
listeners.add(listener);
}
public void removePlayerUpdates(IPlayerListener listener)
{
listeners.remove(listener);
}
In Unity3D, we inherit from AndroidJavaProxy and then call addPlayerUpdates/removePlayerUpdates passing instances of MyAndroidJavaProxyListener.
This is the issue: listeners.remove(listener) is unexpectedly calling back to the C# code trying to determine if two listener are equal:
I/Unity: Exception: No such proxy method: MyAndroidJavaProxyListener.equals(UnityEngine.AndroidJavaObject)
I/Unity: at UnityEngine.AndroidJavaProxy.Invoke (System.String methodName, System.Object[ ] args)
I/Unity: at UnityEngine.AndroidJavaProxy.Invoke (System.String methodName, UnityEngine.AndroidJavaObject[ ] javaArgs)
I/Unity : at UnityEngine._AndroidJNIHelper.InvokeJavaProxyMethod (UnityEngine.AndroidJavaProxy proxy, IntPtr jmethodName, IntPtr jargs)
I/Unity: UnityEngine.AndroidJNI:CallVoidMethod(IntPtr, IntPtr, jvalue[ ])
I/Unity: UnityEngine.AndroidJNISafe:CallVoidMethod(IntPtr, IntPtr, jvalue[ ])
I/Unity: UnityEngine.AndroidJavaObject:_Call(String, Object[ ])
I/Unity: UnityEngine.AndroidJavaObject:Call(String, Object[ ])
I/Unity: com.theroofisonfire.impl.Player:removePlayerUpdates(IPlayerListener)
So, the question is how to implement this equals method:
public class MyAndroidJavaProxyListener : AndroidJavaProxy
{
internal bool equals(AndroidJavaObject other)
{
return other.GetRawObject() == ????????
}
}
I just don’t see how to get the IntPtr to the AndroidJavaProxy. Where is it?
Thanks