16

我知道这似乎是一个微不足道的问题,但我在互联网上的任何地方都找不到任何具体的答案。我在stackoverflow上看到了这个非常相似的问题:如何从android活动启动Unity应用程序? 但这与我的问题完全相反。此外,android Activity 必须能够从 Unity 应用程序接收一些输入字符串,就像使用带有行参数的 system() 调用以在 PC 上启动另一个程序一样。

以下是我在 Android 上的测试 Unity 应用程序的测试按钮事件处理程序的代码:

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 Editor 进行测试时,单击测试按钮时应用程序成功打开 Notepad++.exe。但是,当我尝试在三星 Galaxy S2 设备上打开“互联网”应用程序时,它失败了。有谁知道为什么会这样?使用 Process.Start 打开另一个 Android 应用程序的正确字符串应该是什么?

4

2 回答 2

10

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

查看从 Unity 中启动 Android 应用程序,您可以尝试以下操作:

遵循关于将 Unity 与 Eclipse 集成的指南。

修改步骤 1 中创建的 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 消息。

于 2012-04-19T13:40:42.703 回答
8

试试这个 将此 Launch() 方法更改为静态并传递 Android java 对象,即。像下面这样“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);
}

希望它会有所帮助。

于 2013-08-01T09:23:55.557 回答