如何从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?

  • 如何在团结游戏中使用非主要活动来捕获自定义url?
  • ant jar错误:执行失败:java.io.IOException:无法运行程序... $ {aapt}“:error = 2,没有这样的文件或目录
  • Android和Unity 3D游戏开发
  • 将Unity3D项目导出并运行到Android Studio
  • Unity中创build的游戏如何在Android设备上运行?
  • 实现Parse Unity插件的应用程序在Android设备上崩溃,但在编辑器中工作正常
  • Unity Google Play服务插件API与Show Leaderboard UIfunction不同步?
  • Unity Android构建错误WIN32exceptionZipAlign
  • 我对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); } 

    希望它会有所帮助。