2012-04-09 15 views
15

So che questa sembra essere una domanda banale ma non ho potuto trovare alcuna risposta concreta da nessuna parte su Internet. Ho visto questa domanda molto simile su StackOverflow: How to start Unity application from android activity? ma è esattamente opposto rispetto alla mia domanda. Inoltre, l'attività Android deve essere in grado di ricevere alcune stringhe di input dall'applicazione Unity, proprio come un sistema usa una chiamata() con gli argomenti di linea per avviare un altro programma su un PC.Come avviare un'attività Android da un'applicazione Unity?

Quello che segue è il codice che ho per un gestore di eventi pulsante di test per la mia prova di unità su Android:

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

Quando uso l'Unità Editor per testare, l'applicazione si apre con successo Notepad ++ exe quando scatto. sul pulsante di test. Tuttavia, quando ho provato ad aprire l'app "Internet" sul mio dispositivo Samsung Galaxy S2 non è riuscita. Qualcuno sa perché questo è il caso? Quale dovrebbe essere la stringa corretta per aprire un'altra applicazione Android utilizzando Process.Start?

+0

Sono così triste che nessuno mi può aiutare con questo ... – ksming

+0

Ho trovato due modi per fare questo: 1. Estendi UnityPlayerActivity o 2. Crea un plug-in Android nativo che avvia un'altra attività. Ho provato il metodo 1 molte volte ma finisce sempre in situazioni forzate. Spero che il metodo 2 funzioni per me. – ksming

+0

Ho una stessa domanda. È possibile che chiamiamo un'altra app per Android nell'unità mobile? Come registratore audio, videoregistratore, ... Voglio che nella mia unit app chiami il registratore audio e registri il suono dell'utente. È possibile? – programmer138200

risposta

7

Non ho molta familiarità con Unity, ma ho una buona dose di esperienza Android. Quindi prendi la mia risposta come suggerimento piuttosto che come risposta autorevole.

Guardando il Avvio di Android application from within Unity, si può provare il seguente:

seguire la guida sul Integrating Unity with Eclipse.

Modificare il file Java creato nel passaggio 1 come di seguito:

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

e modificare il codice Unità:

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

Nel caso in cui si trovano ad affrontare qualsiasi problema, si prega di inviare i messaggi logcat.

+0

In realtà, ho provato qualcosa di simile a quello che hai suggerito ma senza usare l'integrazione di Eclipse. È tratto dall'esempio in http://unity3d.com/support/documentation/Manual/PluginsForAndroid.html nella sezione Extending the UnityPlayerActivity Java Code. Ho provato a compilare direttamente con Javac e ad aggiungere una classe estesa con classes.jar per creare un file Extended.jar. Ho persino raggiunto lo stadio in cui posso creare correttamente il file apk, ma quando lo eseguo sul dispositivo Android, si verifica la chiusura forzata. Mi sono tirato i capelli cercando di capire cosa c'è di sbagliato nel file di input AndroidManifest.xml. – ksming

+0

Ci vorrebbe un sacco di lavoro per provare l'integrazione con Eclipse?Come ho detto, non ho familiarità con il framework Unity, quindi sarebbe difficile per me capire quali problemi potreste affrontare. Inoltre, se possibile, incollare i messaggi LogCat per i chiusure forzate. – Rajesh

+0

Rajesh: Segnerò la tua risposta nel modo corretto in quanto sembrano più vicini a ciò che voglio. – ksming

5

prova questo Cambia questo metodo Launch() per statico e passa l'oggetto java Android ie. "jo" ad esso come sotto. Metodo

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

e il cambiamento Launch() a:

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

spero che sarà di aiuto.

+0

è corretto, grazie #Ashish Dhore – hosseinAmini

Problemi correlati