Android и Application.OpenURL [РЕШЕНО]

Программирование для iPhone & Android

Android и Application.OpenURL [РЕШЕНО]

Сообщение alex89200 27 ноя 2011, 03:13

Столкнулся с проблемой - на андроиде не хочет работать метод Application.OpenURL(). Тестил на нескольких девайсах - результат тот же, т.е. никакой. Юнити последняя.. В документации пишется что этот метод кроссплатформенный... Пробовал запускать на яблокоподе - работает, на андроиде отказывается.
В связи с этим полез копаться в AndroidJavaClass и Object, чтобы решить проблему "родными" андроиду средствами. Столкнулся с другой проблемой - AndroidJavaClass не может найти класс. Пытался искать им класс юнити плеера, чтобы получить currentActivity - тоже безрезультатно.
Синтаксис:
Используется csharp
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject unityJO = jc.GetStatic<AndroidJavaObject>("currentActivity");

Выдает что не может найти статическое поле currentActivity...

Подскажите в чем может быть проблема с OpenURL и что не так в ява вызовах?
Последний раз редактировалось alex89200 30 ноя 2011, 02:57, всего редактировалось 2 раз(а).
Аватара пользователя
alex89200
UNец
 
Сообщения: 45
Зарегистрирован: 08 окт 2010, 15:31

Re: Android и Application.OpenURL

Сообщение burlak 27 ноя 2011, 05:10

OpenURL() нормально работает на андроиде.

Синтаксис:
Используется csharp
AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject obj_Activity = cls_UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");


тоже работает замечательно.

У тебя какая версия SDK установлена?
С уважением, Дмитрий Бурлаков.
skype: dmitry.burlakov
email: _dmitry.burlakov@gmail.com
Аватара пользователя
burlak
UNITрон
 
Сообщения: 326
Зарегистрирован: 28 янв 2010, 10:21
Откуда: Санкт-Петербург

Re: Android и Application.OpenURL

Сообщение alex89200 27 ноя 2011, 05:34

burlak писал(а):У тебя какая версия SDK установлена?

последняя, r15

burlak писал(а):AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject obj_Activity = cls_UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

у меня выдает
JNI: Unable to find field id for 'currentActivity' (static)
UnityEngine.AndroidJavaObject:GetStatic(String)

Да, и сразу вопрос :) эти два класса работают в эдиторе? или только в билде на девайсе?
Аватара пользователя
alex89200
UNец
 
Сообщения: 45
Зарегистрирован: 08 окт 2010, 15:31

Re: Android и Application.OpenURL

Сообщение burlak 27 ноя 2011, 16:28

alex89200 писал(а):Да, и сразу вопрос :) эти два класса работают в эдиторе? или только в билде на девайсе?


В эдиторе они не работают, и пишут подобные варнинги. OpenURL - ты какой ресурс открываешь, не специализированный какой нить например market:// ?

Какой(ие) девайс(ы) используешь для тестирования?
С уважением, Дмитрий Бурлаков.
skype: dmitry.burlakov
email: _dmitry.burlakov@gmail.com
Аватара пользователя
burlak
UNITрон
 
Сообщения: 326
Зарегистрирован: 28 янв 2010, 10:21
Откуда: Санкт-Петербург

Re: Android и Application.OpenURL

Сообщение alex89200 27 ноя 2011, 19:11

burlak писал(а):OpenURL - ты какой ресурс открываешь, не специализированный какой нить например market:// ?

Какой(ие) девайс(ы) используешь для тестирования?


Да нет, обычный https://

На HTC Desire Z, планшетка (модель к сожалению не помню, брал у знакомого), еще на эмуле пробовал (там на OpenURL в логкате выдает "No Activity found to handle Intent")
Аватара пользователя
alex89200
UNец
 
Сообщения: 45
Зарегистрирован: 08 окт 2010, 15:31

Re: Android и Application.OpenURL

Сообщение alex89200 30 ноя 2011, 02:55

OpenURL() упорно отказывается работать на Андроиде. Решил проблему через написание андроид плагина путем расширения класса UnityPlayer под андроид.

Класс плагина AndroidUnityHelper.class выглядит так:
Синтаксис:
Используется java
package com.HornsAndHooves.UberMegaGame;

import android.app.Activity;
import android.content.Intent;
import android.content.Context;
import android.net.Uri;
import android.util.Log;

import com.unity3d.player.UnityPlayerActivity;
import android.os.Bundle;

public class AndroidUnityHelper extends UnityPlayerActivity
{
  protected void onCreate(Bundle savedInstanceState) {

    // call UnityPlayerActivity.onCreate()
    super.onCreate(savedInstanceState);

    Log.d("OverrideActivity", "onCreate called!");
  }

    //opens web browser with specified url
    public void OpenURL( String url )
    {
            Log.i("JavaClass", "OpenURL Called.");
            Uri uriUrl = Uri.parse( url );
            Intent myIntent = new Intent(Intent.ACTION_VIEW, uriUrl);
            myIntent.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
            startActivity( myIntent );
    }

}


Соответствующий AndroidManifest.xml вот так:
Синтаксис:
Используется xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.HornsAndHooves.UberMegaGame">
  <application android:icon="@drawable/app_icon" android:label="@string/app_name">
        <activity android:name=".AndroidUnityHelper"
                          android:label="@string/app_name">
        <intent-filter>
                        <action android:name="android.intent.action.MAIN" />
                        <action android:name="android.intent.action.VIEW" />
                        <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
        </activity>
  </application>
</manifest>


Вызов из юнити делается так:
Синтаксис:
Используется csharp
// ВАЖНО!!  "http://" в начале надо указывать ОБЯЗАТЕЛЬНО! Иначе все сломается, комп сгорит и дом взорвется
string url = "http://www.google.com";
#if UNITY_ANDROID && !UNITY_EDITOR
            AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject obj_Activity = cls_UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

            obj_Activity.Call("OpenURL", url);
#endif
#if UNITY_EDITOR
            Application.OpenURL(url);
#endif
Аватара пользователя
alex89200
UNец
 
Сообщения: 45
Зарегистрирован: 08 окт 2010, 15:31


Вернуться в iPhone & Android

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

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