2012-04-09 17 views
15

Bunun önemsiz bir soru gibi göründüğünü biliyorum, ancak internette herhangi bir yerde somut bir cevap bulamadım. Bu benzer soru stackoverflow üzerinde gördüm: How to start Unity application from android activity? ama tam olarak benim sorumun tam tersi. Buna ek olarak, Android etkinliğinin, bir sistem() 'in bir bilgisayardaki başka bir programı başlatmak için satır argümanlarıyla nasıl çağırdığı gibi, Unity uygulamasından bazı giriş dizeleri alması gerekir. ++ Ben Birlik Editör test etmek kullandığınızdaBir Birlik Uygulamasından bir Android etkinliği nasıl başlatılır?

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

, uygulama başarıyla Not Defteri açılır exe Tıkladığımda:. Aşağıdaki

Android'de benim test Birlik uygulaması için bir test butonu olay işleyicisi için ben kodudur Test butonuna Ancak, Samsung Galaxy S2 cihazımda "İnternet" uygulamasını açmaya çalıştığımda başarısız oldu. Bunun neden böyle olduğunu bilen var mı? Process.Start kullanarak başka bir Android uygulaması açmak için doğru dize ne olmalıdır?

+0

Bu konuda bana kimsenin yardımcı olamayacak kadar üzüldüm ... – ksming

+0

Bunu yapmanın iki yolunu buldum: 1. UnityPlayerActivity'yi veya 2. Başka bir etkinliği başlatan bir Android Native eklentisi oluşturun. Yöntem 1'i birçok kez denedim ama her zaman zorla-kapanmış durumda. Umarım yöntem 2 benim için çalışacaktır. – ksming

+0

Aynı sorum var. Birlik içinde mobil olarak başka bir android uygulaması çağırmamız mümkün mü? Ses kaydedici, video kaydedici, ... gibi Birlik app çağrı ses kaydedici ve kullanıcı ses kaydı istiyorum. Mümkün mü? – programmer138200

cevap

7

Unity'ye çok aşina değilim, ancak çok fazla Android deneyimine sahibim. O halde cevabımı yetkili bir cevaptan ziyade bir öneri olarak kabul ediyorum.

başlatma bir Android application from within Unity baktığımızda, aşağıdaki deneyebilirsiniz:

Integrating Unity with Eclipse tarihinde Kılavuzu'nu izleyin. Herhangi bir sorun karşı karşıya durumda

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

, LogCat mesaj gönderebilir edin:

aşağıda 1. Adımda oluşturduğunuz Java dosyasını değiştirin:

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

ve Birlik kodunu değiştirin.

+0

Aslında, önerdiğin gibi Eclipse entegrasyonunu kullanmadan bir şey denedim. Http://unity3d.com/support/documentation/Manual/PluginsForAndroid.html adresindeki Unity the UnityPlayerActivity Java Kodu bölümüne bakın. Doğrudan Javac ile derleme ve extended.jar oluşturmak için classes.jar ile genişletilmiş sınıf ekleme çalıştı. Başarılı bir şekilde apk dosyasını oluşturabildiğim sahneye bile ulaştım ama Android cihazda çalıştırdığımda, zorla-kapanma gerçekleşir. AndroidManifest.xml dosyasında yanlış olanı bulmaya çalışırken saçlarımı çekiyordum. – ksming

+0

Eclipse entegrasyonunu denemek için çok çalışmak ister miydi?Dediğim gibi, Birlik çerçevesine aşina değilim, bu yüzden hangi sorunlarla karşılaştığınızı anlamak benim için zor olurdu. Ayrıca, mümkünse, zorla kapamak için LogCat mesajlarını yapıştırın. – Rajesh

+0

Rajesh: Cevabını istediğime en yakın göründüğü kadar doğru olarak işaretleyeceğim. – ksming

5

bunu deneyin Bu Launch() yöntemini statik olarak değiştirin ve Android java nesnesini geçirin örn. Bunun gibi "jo" aşağı.

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

Umarım yardımcı olur: hiç

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

ve değişim Başlat() yöntemi.

+0

doğru, teşekkürler #Ashish Dhore – hosseinAmini