2013-09-29 13 views
5

Ich habe das gleiche Problem wie in diesem Thema Integrating Unity with Eclipse: Back Button Click erwähnt, aber die vorgeschlagenen Lösungen haben nicht funktioniert.Wie kann ich von Unity Player zur vorherigen Android-Aktivität zurückkehren?

Ich habe einen Unity Player in einer nativen Android-Anwendung eingebettet. Ich kann den Unity Player ohne Probleme starten, aber jetzt möchte ich mit der Zurück-Taste zu meiner vorherigen Aktivität zurückkehren. Ich habe bereits Application.Quit von Unity Seite aus und beende() von Android Seite, beide schließen die ganze Anwendung. Ich habe auch versucht, eine neue Aktivität aus dem Unity-Kontext zu starten, aber das funktioniert auch nicht, ich denke, das liegt daran, dass ich mit Fragmenten arbeite. Meine Aktivitätseinstellungen lauten wie folgt:

MainActivity, in die mehrere Fragmente eingebettet sind. Zwei davon enthalten Listen, aus denen ich eine neue Aktivität starten kann, die mir Detailansichten der Listenelemente anzeigt. Die Detailansichten sind ebenfalls Fragmente, in denen Sie nach links und rechts zum vorherigen/nächsten Element wischen können (ähnlich wie in der Google Mail App). Von der Detailansicht aus können Sie Unity starten, um Erweiterungen mit dem Framework von Qualcomm vuforia zu erhalten.

bis zu diesem Punkt funktioniert alles, aber ich kann nicht vom UnityPlayer zur Detailansicht zurückkehren.

Hat jemand eine Idee, wie man das erreicht?

Danke!

+0

Nur ein schnelle Heads-up wird der Unity-Tag reserviert für Unity-Tool von Microsoft. Neu erstellt als Unity3D. – Jerdak

Antwort

1

Ich arbeite an einem Android-Projekt mit Fragmenten Unity3d im Moment und es scheint, ich habe ein ähnliches Problem.

So weit ich weiß, ist es nicht die Schuld von Fragmenten - es ist Unity, die etwas Lustiges macht, wie zum Beispiel die Back-Button-Presseereignisse abzufangen. Was ich tat, war die folgenden Methoden überschreiben, um zu bestimmen, was los ist, wenn eine Zurück-Taste gedrückt wird:

Das Problem habe ich entdeckt, dass manchmal keine Protokollmeldungen angezeigt, wenn ich die Zurück-Taste drücken - dh es ist nicht wirklich registriert . Zuerst dachte ich, dass es etwas damit zu tun hat, dass ich UnityPlayer.pause() in der Methode onResume() aufgerufen habe, aber als ich das Projekt heute Morgen erneut durchführte, stellte sich heraus, dass das Problem bestehen bleibt UND es intermittierend ist.

Wenn ich mit einer Lösung komme, werde ich meinen Beitrag in diesem Thread bearbeiten. Ich hoffe, die Erklärung war zumindest hilfreich.


Edit:

Haben Sie einen Blick auf diesen Link: Can't pass back event from Unity to android library jar. Es gibt eine Lösung, die Sie in Ihrem Unity-Projekt implementieren können, um die Handhabung der Drucktaste auf der Rückseite zu unterstützen.

tat ich das und dann durchgeführt, einige Tests und es sieht aus wie die onBackPressed() Methode alles in Ordnung aufgerufen wird, wenn das Objekt UnityPlayer NICHT ist pausiert. Dies führt zu der Annahme, dass die Methode UnityPlayer.pause() nur verwendet werden sollte, wenn Ihre App in den Hintergrund tritt und nicht, wenn Sie das Unity-Modell zum angegebenen Zeitpunkt nicht benötigen.

4

Wenn Sie in Unity-Aktivität drücken, wird der gesamte Prozess beendet. Wenn Sie eine Einheitsaktivität über Android-Aktivität starten, starten Sie daher die Einheitsaktivität in einem anderen Prozess. Sie können dies tun, indem Sie dies in Android-Manifestdatei des Projekts deklarieren.

+0

Das hat es gelöst. Habe seit einigen Stunden eine Antwort darauf gesucht. Also vielen Dank;) –

2

Sie sollten in AndroidManifest.xml nächsten Zeilen Code für UnityActivity hinzufügen.java:

<activity 
     android:name=".ui.activities.UnityPlayerActivity" 
     android:label="@string/app_name" 
     android:launchMode="singleTask" <-- THIS 
     android:process=":unityplayer" <-- AND THIS 
     ...  
    > 
     ... 
    </activity> 

Es ist wird UnityActivity wie einem anderen Prozess und Unity Befehl ausführen: Application.Quit(); Schließt nur den Unity-Prozess.

Auch wenn es nicht genug ist, können Sie diese Zeilen zur Aktivität hinzufügen, die UnityActivyty starten. Aber sei vorsichtig, eine andere Paketaktivität wird meistens eigene sharedPreferences und einige andere Sachen bereitstellen.

+0

Arbeitete wie ein Zauber, jetzt tötet Unity nicht die vorherige Aktivität/App. Vielen Dank – Pelanes

0

// Fügen Sie einfach unter zwei Zeilencode In Ihrem Unity-Modul manifast hinzu. unter UnityPlayerActivity

 android:launchMode="singleTask" 
     android:process=":unityplayer" 

und Einheit unter Code hinzufügen Click-Ereignis Schaltfläche diese zurück Application.Quit();

Sein für mich gut funktionierenden