2012-04-09 19 views
15

Ich weiß, das scheint eine triviale Frage zu sein, aber ich konnte nirgendwo im Internet eine konkrete Antwort finden. Ich sah diese sehr ähnliche Frage auf stackoverflow: How to start Unity application from android activity? aber es ist genau das Gegenteil meiner Frage. Zusätzlich muss die Android-Aktivität in der Lage sein, einige Eingabezeichenfolgen aus der Unity-Anwendung zu erhalten, ähnlich wie man system() mit Zeilenargumenten aufruft, um ein anderes Programm auf einem PC zu starten.Wie starte ich eine Android-Aktivität von einer Unity-Anwendung?

Im Folgenden ist der Code, den ich für einen Testknopf Ereignishandler für meinen Test Unity-App auf Android habe:

private void ExternalAppCallHandler() 
{ 
    if(Application.platform == RuntimePlatform.WindowsEditor) 
    { 
     Process.Start(@"C:\Program Files (x86)\Notepad++\notepad++.exe"); 
    } 
    else if(Application.platform == RuntimePlatform.Android) 
    { 
     Process.Start("Internet"); 
    } 
} 

Wenn ich Unity-Editor verwenden, um zu testen, erfolgreich die Anwendung öffnet Notepad ++ exe wenn ich auf. auf dem Testknopf. Als ich jedoch versuchte, die "Internet" -App auf meinem Samsung Galaxy S2-Gerät zu öffnen, ist es fehlgeschlagen. Weiß jemand, warum das so ist? Was sollte die richtige Zeichenfolge sein, um eine andere Android-Anwendung mit Process.Start zu öffnen?

+0

Ich bin so traurig, niemand kann mir dabei helfen ... – ksming

+0

Ich habe zwei Möglichkeiten gefunden, dies zu tun: 1. Erweitern Sie UnityPlayerActivity oder 2. Erstellen Sie ein natives Android-Plugin, das eine andere Aktivität startet. Ich habe Methode 1 oft versucht, aber es endet immer in erzwungener Nähe. Hoffentlich wird Methode 2 für mich funktionieren. – ksming

+0

Ich habe die gleiche Frage. Ist es möglich, dass wir eine andere Android-App in mobilen innerhalb der Einheit anrufen? Wie Audio-Recorder, Videorekorder, ... Ich möchte in meiner Einheit App Audio-Recorder anrufen und den Ton des Benutzers aufnehmen. Ist das möglich? – programmer138200

Antwort

7

Ich bin nicht vertraut mit Unity, aber habe eine ordentliche Menge an Android-Erfahrung. Nehmen Sie meine Antwort eher als Anregung denn als autoritative Antwort.

Mit Blick auf die Einleitung einer Android application from within Unity, könnten Sie versuchen, die folgenden:

den Leitfaden Folgen auf Integrating Unity with Eclipse.

Ändern Sie die Java-Datei in Schritt 1 wie unten erstellt:

package com.Unity3D.EclipseIntegration; 

import android.os.Bundle; 

import com.unity3d.player.UnityPlayerActivity; 

public class EclipseIntegration extends UnityPlayerActivity { 

    private Intent myIntent; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //Assuming that we want to launch the browser to browse a website 
     Uri uri = Uri.parse("http://www.google.com"); 
     myIntent= new Intent(Intent.ACTION_VIEW, uri); 
    } 

    public void Launch() 
    {  
     startActivity(myIntent); 
    } 
} 

und Unity Code ändern:

private void ExternalAppCallHandler() 
{ 
    if(Application.platform == RuntimePlatform.WindowsEditor) 
    { 
     Process.Start(@"C:\Program Files (x86)\Notepad++\notepad++.exe"); 
    } 
    else if(Application.platform == RuntimePlatform.Android) 
    { 
     AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
     AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); 
     jo.Call("Launch"); 
    } 
} 

Falls Sie Probleme konfrontiert sind, bitte die LogCat Nachrichten veröffentlichen.

+0

Eigentlich habe ich etwas wie das, was Sie vorgeschlagen haben, aber ohne Eclipse-Integration versucht. Es ist aus dem Beispiel in http://unity3d.com/support/documentation/Manual/PluginsForAndroid.html unter dem Abschnitt UnityPlayerActivity Java Code erweitern. Versucht das direkte Kompilieren mit Javac und das Hinzufügen einer erweiterten Klasse mit classes.jar, um eine Extended.jar zu erstellen. Ich habe sogar die Stufe erreicht, in der ich die apk-Datei erfolgreich erstellen kann, aber wenn ich sie auf einem Android-Gerät ausführe, tritt erzwungenes Schließen auf. Habe an meinen Haaren gezogen, um herauszufinden, was mit der Eingabe der AndroidManifest.xml-Datei falsch ist. – ksming

+0

Wäre es viel Arbeit, die Eclipse-Integration zu versuchen?Wie gesagt, ich kenne den Rahmen von Unity nicht, daher wäre es für mich schwierig zu verstehen, mit welchen Problemen Sie konfrontiert sind. Fügen Sie nach Möglichkeit auch die LogCat-Nachrichten für Ihre erzwungenen Schließen ein. – Rajesh

+0

Rajesh: Ich werde Ihre Antwort so korrekt markieren, wie sie am nächsten zu meinen Wünschen erscheinen. – ksming

5

versuchen Sie dies Ändern Sie diese Launch() -Methode auf statische und übergeben Sie Android Java-Objekt dh. "Jo" dazu wie unten.

AndroidJavaClass androidJC = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
AndroidJavaObject jo= androidJC.GetStatic<AndroidJavaObject>("currentActivity"); 
AndroidJavaClass jc = new AndroidJavaClass("package_name.Ur_Actvity_Name"); 
jc.CallStatic("Launch",jo);` 

und Änderung Launch() -Methode:

public static Launch(Activity activity) 
{ 
Intent myIntent = new Intent(); 
activity.startActivity(myIntent); 
} 

Hoffe, es hilft.

+0

ist es richtig, danke #Ashish Dhore – hosseinAmini