Использование реализации AndroidJavaClass в единстве - PullRequest
0 голосов
/ 02 марта 2020

У меня есть java объект, который получает объект слушателя в качестве параметра. Этот слушатель должен реализовать определенный java абстрактный класс.

Я пытаюсь предотвратить запись этого в java, потому что я использую SDK, который входит в файл JAR, и для вызова файла JAR из файл java, мне нужно создать один файл jar, который включает их оба (см. Unity3D с несколькими банками (android jar + pure java lib) )

Этот ответ объясняет мою ошибку, но не дает решения. AndroidJavaProxy не является интерфейсом

Попробую поподробнее: у меня есть класс 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

Итак, есть ли способ сделать это? Заранее спасибо, Хаим

1 Ответ

0 голосов
/ 02 марта 2020

Во-первых: прочитайте эту статью . Android Java Прокси может реализовывать только интерфейсы. Поэтому вы должны создать интерфейс в 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);
    }
}

Затем в своем классе Unity создайте 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...