如何从Unity应用程序启动Android活动?

我知道这似乎是一个微不足道的问题,但我无法在互联网上的任何地方find具体的答案。 我在stackoverflow上看到了这个非常类似的问题: 如何从android活动启动Unity应用程序? 但是和我的问题完全相反。 此外,android活动必须能够从Unity应用程序接收一些inputstring,就像使用system()调用线参数在PC上启动另一个程序一样。

以下是我在Android上testingUnity应用程序的testingbutton事件处理程序的代码:

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

当我使用Unity编辑器进行testing时,当我单击testingbutton时,应用程序会成功打开Notepad ++。exe。 但是,当我试图打开我的三星Galaxy S2设备上的“互联网”应用程序失败。 有谁知道这是为什么? 什么应该是正确的string打开另一个Android应用程序使用Process.Start?

Solutions Collecting From Web of "如何从Unity应用程序启动Android活动?"

我对Unity并不是很熟悉,但有相当的Android经验。 所以把我的答案作为一个build议,而不是一个权威的答案。

从Unity内部启动Android应用程序 ,您可以尝试以下操作:

遵循集成Unity和Eclipse的指南。

修改步骤1中创build的Java文件,如下所示:

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

并修改你的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"); } } 

如果您遇到任何问题,请发布LogCat消息。

试试这个将这个Launch()方法改为静态并传递Android java对象ie。 “jo”就像下面那样。

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

并将Launch()方法更改为:

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

希望它会有所帮助。