2016-05-24 2 views
0

Ich brauche einen ganzzahligen Wert von einer Einheit der App zu einem Android eines mit einem Intent zu kommunizieren. Die Android-App implementiert einen Empfänger, der diese Ganzzahl als zusätzlichen Parameter in der Absicht erwartet.kann nicht eine ganze Zahl übergibt - als Statisten in einer Absicht - von Unity zu einer Android App

Meine Einheit (C#) Code sieht wie folgt aus:

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); 

Aber wenn es ausgeführt wird, erhalte ich die Fehlermeldung:

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) 

Als ob es nicht die zweite int Parameter zu erkennen waren . Irgendwelche Hinweise? Ich habe auch versucht, ein Objekt-Array mit dem String und dem Int übergeben, aber es zeigt den gleichen Fehler. Übergabe als Integer Instanz funktioniert auch nicht, beschweren, dass es keine Methode ist putExtra mit mit String und Integer als Parameter:

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); 

Was bin ich? Ich werde versuchen, es einfach zu analysieren und es als String übergeben, aber ich möchte das vermeiden und in der Lage sein, es als eine Zahl zu übergeben.

+0

Ist dieser Fehler die man für die erste Version oder die zweite? Weil es sagt 'keine Methode mit name = 'putExtra'', die Sie sagten, ist der Fehler für die Sekunde. –

+0

Bei beiden Fehlern geht es nicht darum, das 'putExtra' zu finden, das erste erwähnt eines mit einem' String' als Parameter, das zweite Mal beschwert es sich über einen 'String' und einen' Integer' (die Klasse, nicht der native Typ). – Sebastian

+1

java.lang.Integer.class! = Int.class und es gibt keine Methode 'putExtra (String name, Integer-Wert)' 'aber putExtra (String name, int value)' – Selvin

Antwort

1

Ok, dank @ Selvin Kommentar und this. Anscheinend benötigt der Java-Wrapper von Unity, dass ich festlege, dass die Methode beim Aufruf der Methode Call etwas zurückgibt. So wird das Problem durch den Austausch dieses Problem gelöst:

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

mit diesem:

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