从Unity到Android应用程序无法传递一个整数 - 作为一个额外的意图

时间:2016-05-24 08:53:11

标签: c# android android-intent unity3d

我需要使用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);

我错过了什么? 我将尝试解析并将其作为字符串传递,但我希望避免这种情况并将其作为数字传递。

1 个答案:

答案 0 :(得分:1)

好的,感谢@ Selvin的评论和this。 显然,Unity的java包装器需要我指定该方法在调用Call方法时返回一些东西。所以通过替换它来解决问题:

...
intent.Call("putExtra", "timestamp", timestamp);
...

有了这个:

...
intent.Call<AndroidJavaObject>("putExtra", "timestamp", timestamp);
...