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

Я знаю, что это кажется тривиальным вопросом, но я не нашел конкретного ответа нигде в Интернете. Я видел очень похожий вопрос о stackoverflow: Как запустить приложение Unity с Android активность?, но это прямо противоположно моему вопросу. Кроме того, активность Android должна иметь возможность получать некоторые входные строки из приложения 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?


person ksming    schedule 09.04.2012    source источник
comment
Мне так грустно, что никто не может мне с этим помочь ...   -  person ksming    schedule 12.04.2012
comment
Я нашел два способа сделать это: 1. Расширьте UnityPlayerActivity или 2. Создайте плагин Android Native, который запускает другое действие. Я пробовал метод 1 много раз, но он всегда оказывался в ситуации принудительного закрытия. Надеюсь, мне подойдет метод 2.   -  person ksming    schedule 17.04.2012
comment
У меня такой же вопрос. Возможно ли, что мы вызовем другое приложение для Android на мобильном телефоне в рамках Unity? Такие, как аудиомагнитофон, видеомагнитофон, ... Я хочу, чтобы в моем приложении единства вызывали аудиорекордер и записывали звук пользователя. Это возможно?   -  person hmahdavi    schedule 29.01.2016


Ответы (2)


Я не очень хорошо знаком с 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.

person Rajesh    schedule 19.04.2012
comment
Собственно, я пробовал что-то вроде того, что вы предложили, но без интеграции с Eclipse. Это из примера в unity3d.com/support/documentation/Manual/PluginsForAndroid.html в разделе Расширение кода Java UnityPlayerActivity. Пробовал скомпилировать с Javac напрямую и добавить расширенный класс с classes.jar для создания Extended.jar. Я даже дошел до стадии, когда я могу успешно создать файл apk, но когда я запускаю его на устройстве Android, происходит принудительное закрытие. Я тянул за волосы, пытаясь понять, что не так с входным файлом AndroidManifest.xml. - person ksming; 20.04.2012
comment
Было бы много работы, чтобы попробовать интеграцию с Eclipse? Как я уже сказал, я не знаком с фреймворком Unity, поэтому мне было бы сложно понять, с какими проблемами вы можете столкнуться. Также, если возможно, вставьте сообщения LogCat для принудительного закрытия. - person Rajesh; 20.04.2012
comment
Раджеш: Я отмечу ваш ответ как правильный, поскольку он кажется наиболее близким к тому, что я хочу. - person ksming; 23.04.2012

попробуйте изменить этот метод Launch () на статический и передать Java-объект Android, т.е. "Джо" к нему, как показано ниже.

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

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

person Ashish Dhore    schedule 01.08.2013