有没有一种方法可以在安卓上重新启动Unity应用程序?

3
我知道这不是一个好的做法,但在我的特定情况下,这正是我所需要的:我需要能够重新启动我的Unity应用程序(来自本地插件或C#,无所谓)。
我尝试使用此链接中的代码(甚至是纯C#此处),但均未成功。

重新加载初始场景就足够了吗?SceneManager.LoadScene(0); - derHugo
你找到重启应用程序的方法了吗? - Whitebrim
@Whitebrim 是的,我刚才在下面发布了我的答案。 - Tamaya
2个回答

5
我用以下代码成功运行了它:
private static void RestartAndroid() {
    if (Application.isEditor) return;

    using (var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) {
        const int kIntent_FLAG_ACTIVITY_CLEAR_TASK = 0x00008000;
        const int kIntent_FLAG_ACTIVITY_NEW_TASK = 0x10000000;

        var currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
        var pm = currentActivity.Call<AndroidJavaObject>("getPackageManager");
        var intent = pm.Call<AndroidJavaObject>("getLaunchIntentForPackage", Application.identifier);

        intent.Call<AndroidJavaObject>("setFlags", kIntent_FLAG_ACTIVITY_NEW_TASK | kIntent_FLAG_ACTIVITY_CLEAR_TASK);
        currentActivity.Call("startActivity", intent);
        currentActivity.Call("finish");
        var process = new AndroidJavaClass("android.os.Process");
        int pid = process.CallStatic<int>("myPid");
        process.CallStatic("killProcess", pid);
    }
}

它在我的设备上运行正常(Android 10)! - Whitebrim
也在我的三星Galaxy Note 10上运行良好,非常感谢! - Marvin Krüger
适用于我 (Android 12) - Fahim kamal Ahmed
不需要提及,但也适用于Android 11。谢谢! - mbattaloglu
对我来说(Android 12)运行正常。 - undefined

0

这似乎适用于这种情况:

    using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
    AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

    AndroidJavaObject pm = currentActivity.Call<AndroidJavaObject>("getPackageManager");
    AndroidJavaObject intent = pm.Call<AndroidJavaObject>("getLaunchIntentForPackage", Application.identifier);
    intent.Call<AndroidJavaObject>("setFlags", 0x20000000);//Intent.FLAG_ACTIVITY_SINGLE_TOP

    AndroidJavaClass pendingIntent = new AndroidJavaClass("android.app.PendingIntent");
    AndroidJavaObject contentIntent = pendingIntent.CallStatic<AndroidJavaObject>("getActivity", currentActivity, 0, intent, 0x8000000); //PendingIntent.FLAG_UPDATE_CURRENT = 134217728 [0x8000000]
    AndroidJavaObject alarmManager = currentActivity.Call<AndroidJavaObject>("getSystemService", "alarm");
    AndroidJavaClass system = new AndroidJavaClass("java.lang.System");
    long currentTime = system.CallStatic<long>("currentTimeMillis");
    alarmManager.Call("set", 1, currentTime + 1000, contentIntent); // android.app.AlarmManager.RTC = 1 [0x1]

    Debug.LogError("alarm_manager set time " + currentTime + 1000);
    currentActivity.Call("finish");

    AndroidJavaClass process = new AndroidJavaClass("android.os.Process");
    int pid = process.CallStatic<int>("myPid");
    process.CallStatic("killProcess", pid);
}

来源: https://noodle1983.github.io/2018/11/17/RestartAndroidAppInUnityPureC/


不工作,只是退出应用程序。Android 10 - Whitebrim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接