java - 通过 Unity/Java 插件启动 Android 应用程序

标签 java c# android unity-game-engine

我正在尝试通过插件将我的 Unity 项目连接到 Java,以便启动另一个应用程序,但尝试没有成功。

统一(C#):

public void AndroidCallNonStatic() {
    using (AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) {
        using (AndroidJavaObject activity = javaClass.GetStatic<AndroidJavaObject>("currentActivity")) {
            object[] targs = new object[1] { "org.mozilla.firefox" };
            activity.Call("nonStaticMethod", targs);
        }
    }
}

Java(安卓):

import com.unity3d.player.UnityPlayerActivity;
public class Main extends UnityPlayerActivity {

    public static Context mContext;
    public static PackageManager mManager;

    @Override
    protected void onCreate(Bundle bundle)
    {
            super.onCreate(bundle);
            mContext = this;
            mManager = getPackageManager();
    }

    public void nonStaticMethod(String s)
    {
            Log.d("TAG","nonStatic method was called");
            launchApp(s);
    }

    public static void StaticMethod(String s)
    {
            Log.d("TAG","Static method was called " + s);
            launchApp(s);
    }

    public void launchApp(String packageName)
    {
        Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
        if (intent != null)
        {
            // Activity was found, launch new app
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
        else
        {
            // Activity not found. Send user to market
            intent = new Intent(Intent.ACTION_VIEW);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setData(Uri.parse("market://details?id="+packageName));
            startActivity(intent);
        }
    }

}

有人可以帮我解决这个问题吗?我已经用尽了我的 Android/Unity 知识,但无法理解为什么它不起作用。我的想法是它与包名称有关。

最佳答案

您可以直接在 C# 中从 Unity 启动 Android 应用程序:

public void LaunchApp(String packageName)
{
    AndroidJavaClass unityPlayer;
    AndroidJavaObject currentActivity;
    AndroidJavaObject packageManager;
    AndroidJavaObject launchIntent;

    unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    packageManager = currentActivity.Call<AndroidJavaObject>("getPackageManager");
    launchIntent = packageManager.Call<AndroidJavaObject>("getLaunchIntentForPackage", packageName);
    currentActivity.Call("startActivity", launchIntent);
}

关于java - 通过 Unity/Java 插件启动 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25393600/

相关文章:

java - 如何使用 jdbc/spring-jdbc 不使用 PGInterval 对 PostgreSQL 区间数据类型进行操作?

java - 有没有一种快速的方法可以手动将一堆带有 poms 的工件 jar 上传到 archive?

c# - 自动重新连接到互联网

c# - 动态 LINQ 日期查询性能

android - 为什么RelativeLayout.LayoutParams.addRule() 不起作用?

android - 如何向MapActivity添加菜单?

java - 如何监听 picasso (Android)加载完成事件?

java - Ant工具工作问题

java - 在java中的jlist中创建超链接

c# - StructureMap 单例用法(一个实现两个接口(interface)的类)