Запуск стороннего приложения из своей игры на Андроид

Общие вопросы о Unity3D

Запуск стороннего приложения из своей игры на Андроид

Сообщение Inessa 22 янв 2017, 18:06

У меня возникла необходимость запускать сторонние приложения из своей игры на Андроид с заданным значением URL.

Речи идет об альтернативе использования метода Application.OpenURL(), который позволяет открыть в предложенном браузере выбранный URL.

Мне нужно запускать КОНКРЕТНОЕ приложение на устройстве и передать ему заданное значение URL, страница с которым должна быть открыта в этом приложении.

В качестве примера можно использовать приложение магазина "Google Маркет", которое я хочу открыть, используя URL со страницей моей игры (см. ниже).

Скажите, как нужно изменить код, чтобы появилась возможность передать URL в качестве параметра для вызываемого приложения?

Синтаксис:
Используется csharp
private void OpenCustomAppWithGivenURL()
{
  string bundleID = "com.google.android.gms";
  string myAppURL = "https://play.google.com/store/apps/details?id=com.mycompany.myapp";

  AndroidJavaClass up = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  AndroidJavaObject ca = up.GetStatic<AndroidJavaObject>("currentActivity");
  AndroidJavaObject packageManager = ca.Call<AndroidJavaObject>("getPackageManager");

  AndroidJavaObject launchIntent = null;
  try
  {
    launchIntent = packageManager.Call<AndroidJavaObject>("getLaunchIntentForPackage",bundleID);

    if(launchIntent != null)
      ca.Call("startActivity", launchIntent);
  }
  catch(Exception ex)
  {
    UnityEngine.Debug.Log("exception"+ex.Message);
  }
}
 
Inessa
UNITрон
 
Сообщения: 160
Зарегистрирован: 13 мар 2013, 11:56

Re: Запуск стороннего приложения из своей игры на Андроид

Сообщение JTProjects 22 янв 2017, 21:49

Открыть страницу приложения в Google Play
Синтаксис:
Используется csharp
Application.OpenURL("market://details?id=com.application.example");


Для передачи ссылки в вашем примере нужно после присвоения launchIntent вставить эту строчку:

launchIntent.setData(Uri.parse(myAppURL));
Аватара пользователя
JTProjects
UNIт
 
Сообщения: 97
Зарегистрирован: 04 ноя 2016, 14:31

Re: Запуск стороннего приложения из своей игры на Андроид

Сообщение Inessa 23 янв 2017, 08:27

При попытке вставить строчку launchIntent.setData(Uri.parse(myAppURL)); после присвоения launchIntent редактор Unity при компиляции скриптов выдает ошибку:

error CS1061: Type `UnityEngine.AndroidJavaObject' does not contain a definition for `setData' and no extension method `setData' of type `UnityEngine.AndroidJavaObject' could be found (are you missing a using directive or an assembly reference?)

Подскажите, как можно исправить эту ошибку?
Inessa
UNITрон
 
Сообщения: 160
Зарегистрирован: 13 мар 2013, 11:56

Re: Запуск стороннего приложения из своей игры на Андроид

Сообщение JTProjects 23 янв 2017, 20:20

Сам я с таким способом вызова android-функций из Uninty не сталкивался. Наверное, нужно создать новый AndroidJavaObject для класса Uri, вызвать для него Call метода Parse с параметром myAppURL и присвоить результат переменной (что-то такое: uri = uri_object.Call("parse", myAppURL) ), а уже после этого вызвать launchIntent.Call("setData", uri) и ca.Call("startActivity", launchIntent);

Но для вызова приложения google play (маркет) я все же рекомендую первый вариант с OpenURL - сэкономите много времени и "надежность" кода будет намного выше.
Аватара пользователя
JTProjects
UNIт
 
Сообщения: 97
Зарегистрирован: 04 ноя 2016, 14:31


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18