2016-05-24 2 views
0

Мне нужно передать целочисленное значение из приложения Unity на Android с использованием намерения. Приложение Android реализует приемник, который ожидает, что это целое число станет дополнительным параметром в Intent.Не удается передать целое число - в качестве дополнительного в намерении - от Unity до Android-приложения

My 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 с с Последовательностью и 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

Это ошибка одна для первой версии или второй? Потому что он говорит 'no method с именем = 'putExtra'', который, как вы сказали, является ошибкой для второго. –

+0

обе ошибки касаются не нахождения 'putExtra', первый упоминает один с параметром' String', второй раз он жалуется на 'String' и' Integer' (класс, а не нативный тип). – Sebastian

+1

java.lang.Integer.class! = Int.class и нет метода 'putExtra (String name, Integer value)' but 'putExtra (String name, int value)' – Selvin

ответ

1

Хорошо, спасибо @ Selvin's comment и this. Очевидно, что для java-оболочки Unity требуется, чтобы я указывал, что метод возвращает что-то при вызове метода Call. Таким образом, проблема решается путем замены:

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

С этим:

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