Как начать работу с Android из приложения Unity?

Я знаю, что это кажется тривиальным вопросом, но я не мог найти никакого конкретного ответа в любом месте в Интернете. Я видел этот очень похожий вопрос о stackoverflow: Как запустить приложение Unity из андроидной активности? но это совершенно противоположно моему вопросу. Кроме того, активность андроида должна иметь возможность получать некоторые входные строки из приложения Unity, так же, как использовать вызовы system() с линейными аргументами для запуска другой программы на ПК.

Ниже приведен код, который у меня есть для обработчика событий тестовой кнопки для моего тестового приложения Unity на Android:

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 для тестирования, приложение успешно открывает Notepad ++. exe, когда я нажимаю кнопку теста. Однако, когда я попытался открыть приложение "Интернет" на своем устройстве Samsung Galaxy S2, он потерпел неудачу. Кто-нибудь знает, почему это так? Какая должна быть правильная строка для открытия другого приложения для Android с помощью Process.Start?

Ответы

Ответ 1

Я не очень хорошо знаком с Unity, но имею много опыта в Android. Поэтому отвечай мой ответ как предложение, а не на авторитетный ответ.

Глядя на запуск приложения Android из Unity, вы можете попробовать следующее:

Следуйте руководству Интеграция Unity с Eclipse.

Измените файл Java, созданный на шаге 1, как показано ниже:

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.

Ответ 2

попробуйте это Измените этот метод Launch() на static и передайте Java 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);
}

Надеюсь, это поможет.