【发布时间】:2019-09-02 14:57:57
【问题描述】:
我为一个设备编写了一个 USB 驱动程序,它每秒更新 x、y、z 位置 200 次,我不想调用某些函数来每秒 200 次获取新值,从而更新共享上的值内存位置。 是否可以将 IntPtr 传递给 AndroidJavaObject.call 方法并使用它来访问共享内存或其他方式? 还是有不同的方法来解决这个问题? 发布我的代码没有意义,因为没有关于共享内存的内容。
在统一 C# 方面:
AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject unityContext = unityActivity.Call<AndroidJavaObject>("getApplicationContext");
float[] res = new float[7];
IntPtr ptr = Marshal.AllocHGlobal(res.Length * sizeof(float));
var ajc = new AndroidJavaObject("com.example.t265lib.USBController", unityContext, 256, ptr, null);
在 Java 方面,它只是一个构造函数:
public USBController(Context context, int chunkSize, int ptr,TextView deb) {
if (deb != null) debugging = deb;
if (chunkSize != 0) CHUNK_SIZE = chunkSize;
msg = new byte[9];
msgResponse = new byte[8];
resPtr = new float[7];
this.context = context;
usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
}
【问题讨论】: