我需要使用Intent将Unity应用程序中的整数值传递给Android。 Android应用程序实现了一个接收器,它希望这个整数作为Intent中的额外参数。
我的Unity(C#)代码如下所示:
int timestamp = 0; // whatever value
var playerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var activity = playerClass.GetStatic<AndroidJavaObject>("currentActivity");
var intent = new AndroidJavaObject("android.content.Intent", ACTION_LOCK_DATE);
intent.Call("putExtra", "timestamp", timestamp);
activity.Call("sendBroadcast", intent);
但是在运行它时,我收到错误:
I/Unity ( 4034): AndroidJavaException: java.lang.NoSuchMethodError: no method with name='putExtra' signature='(Ljava/lang/String;I)V' in class Landroid/content/Intent;
I/Unity ( 4034): java.lang.NoSuchMethodError: no method with name='putExtra' signature='(Ljava/lang/String;I)V' in class Landroid/content/Intent;
I/Unity ( 4034): at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
I/Unity ( 4034): at com.unity3d.player.UnityPlayer.a(Unknown Source)
I/Unity ( 4034): at com.unity3d.player.UnityPlayer$b.run(Unknown Source)
好像它没有识别第二个 int 参数。有线索吗? 我也尝试使用String和int传递一个对象数组,但它显示了相同的错误。将它作为 Integer 实例传递也不起作用,抱怨没有方法putExtra with String和Integer作为参数:
var playerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var activity = playerClass.GetStatic<AndroidJavaObject>("currentActivity");
var intent = new AndroidJavaObject("android.content.Intent", ACTION_LOCK_DATE);
var integerClass = new AndroidJavaClass("java.lang.Integer");
var ts = integerClass.CallStatic<AndroidJavaObject>("valueOf", timestamp);
intent.Call("putExtra", "timestamp", ts);
activity.Call("sendBroadcast", intent);
我错过了什么? 我将尝试解析并将其作为字符串传递,但我希望避免这种情况并将其作为数字传递。
答案 0 :(得分:1)
好的,感谢@ Selvin的评论和this。
显然,Unity的java包装器需要我指定该方法在调用Call
方法时返回一些东西。所以通过替换它来解决问题:
...
intent.Call("putExtra", "timestamp", timestamp);
...
有了这个:
...
intent.Call<AndroidJavaObject>("putExtra", "timestamp", timestamp);
...