2012-04-09 18 views
15

Wiem, że to pytanie wydaje się banalne, ale nie mogłem znaleźć żadnej konkretnej odpowiedzi w Internecie. Widziałem to bardzo podobne pytanie na stackoverflow: How to start Unity application from android activity? , ale jest dokładnie naprzeciwko mojego pytania. Dodatkowo aktywność androida musi być w stanie odbierać niektóre ciągi wejściowe z aplikacji Unity, podobnie jak w przypadku użycia funkcji system() z argumentami liniowymi w celu uruchomienia innego programu na komputerze.Jak rozpocząć działanie Androida z aplikacji Unity?

Poniżej znajduje się kod mam dla obsługi zdarzeń przycisku testu na moim testowym Unity aplikacji na Androida:

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

Kiedy używać Unity Editor przetestować, aplikacja skutecznie otwiera Notepad ++ exe po kliknięciu. na przycisku testu. Jednak gdy próbowałem otworzyć aplikację "Internet" na moim urządzeniu Samsung Galaxy S2, nie udało się. Czy ktoś wie, dlaczego tak się dzieje? Jaki powinien być poprawny ciąg do otwierania kolejnej aplikacji dla systemu Android za pomocą procesu Process.Start?

+0

Jestem taki smutny, nikt nie może mi pomóc z tym ... – ksming

+0

Znalazłem dwa sposoby, aby to zrobić: 1. Rozszerz UnityPlayerActivity lub 2. Utwórz wtyczkę Android Native, która rozpoczyna inną aktywność. Próbowałem już wielokrotnie metody 1, ale zawsze kończyło się to na przymusowym zamknięciu. Mam nadzieję, że metoda 2 zadziała dla mnie. – ksming

+0

Mam to samo pytanie. Czy możliwe jest, że nazwiemy inną aplikację na Androida w telefonie komórkowym w jedności? Takich jak rejestrator dźwięku, rejestrator wideo, ... Chcę w moim aple jedność aplikacji nagrywanie dźwięku i nagrywać dźwięk użytkownika. czy to możliwe? – programmer138200

Odpowiedz

7

Nie znam dobrze Unity, ale mam spore doświadczenie z Androidem. Więc przyjmij moją odpowiedź jako sugestię zamiast autorytatywnej odpowiedzi.

Patrząc na uruchomienie Android application from within Unity, można spróbować wykonać następujące czynności:

Śledź ten przewodnik na Integrating Unity with Eclipse.

Zmodyfikuj plik Java utworzony w kroku 1, jak poniżej:

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

i zmodyfikować kod Unity:

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

W przypadku, gdy w obliczu jakichkolwiek problemów, proszę pisać wiadomości logcat.

+0

Właściwie próbowałem czegoś, co zasugerowałeś, ale bez korzystania z integracji Eclipse. Jest to na przykład z http://iti3d.com/support/documentation/Manual/PluginsForAndroid.html w sekcji Rozszerzanie kodu UnityPlayerActivity Java. Próbowałem bezpośrednio kompilować Javac i dodawać rozszerzoną klasę z klasą.jar, aby utworzyć plik Extended.jar. Dotarłem nawet do etapu, w którym mogę pomyślnie skompilować plik APK, ale gdy uruchomię go na urządzeniu z Androidem, wymuszone zamknięcie nastąpi. Wyciągałem włosy, próbując dowiedzieć się, co jest nie tak z wejściowym plikiem AndroidManifest.xml. – ksming

+0

Czy warto byłoby przeprowadzić integrację Eclipse?Jak już powiedziałem, nie znam struktury Jedności, więc trudno byłoby mi zrozumieć, z jakimi problemami się borykacie. Ponadto, jeśli to możliwe, wklej komunikaty LogCat dla zamknięcia sił. – Rajesh

+0

Rajesh: Zaznaczę twoją odpowiedź tak poprawną, jak wydaje się najbliższą temu, czego chcę. – ksming

5

spróbuj tego Zmień tę metodę uruchamiania() na statyczny i przekazuj obiekt Android java tj. "jo" do tego jak poniżej. Metoda

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

i zmiana Launch() do:

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

Mam nadzieję, że to pomoże.

+0

Zgadza się, dziękuję #Ashish Dhore – hosseinAmini

Powiązane problemy