简体   繁体   English

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

[英]Launching Android Applications through Unity / Java plugins

I'm attempting to connect my Unity project to Java via plugin in order to launch another application, and have been unsuccessful with attempts to do so. 我正在尝试通过插件将我的Unity项目连接到Java,以启动另一个应用程序,但尝试失败。

Unity (C#): Unity(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 (Android): Java(Android):

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

} }

Can anyone help me out with this? 谁能帮我这个忙吗? I've exhausted the extent of my Android/Unity knowledge and can't understand why it's not working. 我已经用尽了我的Android / Unity知识,无法理解为什么它不起作用。 My thoughts are that it has something to do with the package name. 我的想法是,它与程序包名称有关。

You can launch Android application directly from C# in Unity side 您可以直接从Unity端的C#启动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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM