Как правильно передать Контекст из Unity в мой плагин?
C # сторона:
Ваш класс USBController
имеетконструктор, который принимает Context
в качестве аргумента.Перед вызовом функции startUSB
получите Unity Context
, а затем отправьте его в конструктор при создании экземпляра USBController
.
Get Unity Context:
AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject unityContext = unityActivity.Call<AndroidJavaObject>("getApplicationContext");
Отправьте Контекст в свой Java-код при создании его экземпляра:
ajc = new AndroidJavaObject("com.bebopsensors.dg.USBController", unityContext);
Теперь вы можете вызвать вашу startUSB
функцию:
int connected = ajc.Call<int>("startUSB");
Java Side:
В вашей функции startUSB
теперь вы можете использовать Context
с getSystemService
.Я заметил, что вы прокомментировали это.Обратите внимание, что context.USB_SERVICE
должно быть Context.USB_SERVICE
.c
в Context
следует использовать заглавные буквы.
public int startUSB()
{
usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
....
....
}
Не знаю, нужны ли разрешения для USB, а также в файле манифеста.
Не совсем уверен в этом, но я считаю, что вызова функции requestPermission
, которую вы сделали, должно быть достаточно, чтобы справиться с этим.Если это не работает, тогда я предлагаю вам протестировать свою Java-программу только на Android и без Unity, чтобы проверить, работает ли она.Если это работает, предложенное мной решение также должно работать.