2016-07-17 20 views

Antwort

0

Sie können es nur aus der Java-Ebene verwenden. Versuchen Sie, die Daten von JNI nach Java zu bringen und in der Aktivität zu verwenden.

+0

Ich verstehe TangoUX kann nur in Java-Ebene verwendet werden. Ich habe bereits eine funktionierende App, die auf TangoService zugreift und in JNI rendert, aber ich möchte eine Benutzeroberfläche wie die TangoUX hinzufügen, die den Benutzer über den Tango-Status informieren kann. Was ich ausprobiert habe, ist: tangoUX in Aktivität als dieses offizielle Java-Beispiel einzurichten und auszuführen und unterdessen weiterhin JNI zu verwenden, um auf TangoService zuzugreifen, wie im offiziellen c Beispiel. Es scheint, dass TangoUX in einem solchen Setup normalerweise nicht funktioniert. –

0

Ja Es ist möglich, aber nicht geradlinig.

Wie Jason Guo sagte, müssen Sie die notwendigen Informationen von der C-API holen und über den JNI an den Java TangoUx zurücksenden.

Grundsätzlich in Ihrem TangoService Rückruf (C) Funktionen müssen Sie das sachgemäße TangoUX Funktion (Java) nennen:

  • TangoService_connectOnXYZijAvailable -> mTangoUx.updateXyzCount
  • TangoService_connectOnPoseAvailable -> mTangoUx.updatePoseStatus
  • TangoService_connectOnTangoEvent -> mTangoUx.updateTangoEvent

Dafür müssen Sie sehen, wie JNI verwendet wird Rufen Sie Java-Funktionen: http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html

Seien Sie vorsichtig, weil die C-Callbacks nicht im Java-Hauptthread ausgeführt werden. Daher müssen Sie JNIEnv bei jedem Rückruf aktualisieren (mit der JavaVM-Klasse). Dieser Link enthält einige nützliche Informationen, obwohl er eine alte Version des JNI verwendet. http://android.wooyd.org/JNIExample/files/JNIExample.pdf