Html5 Canvas работает в WebView основной активности, но перестает работать в WebView активности, вызываемой с помощью намерения в том же приложении - PullRequest
0 голосов
/ 28 февраля 2012

Устройство, на котором я тестирую, работает под управлением Android 2.3.4.

У меня есть игра Html5 / JavaScript.

Изначально у меня было меню и игра в одном и том же занятии, и оно работало нормально.Я только что загрузил URL игры из папки Assets.

Я хотел изменить это так, чтобы я запускал игру в новом Деятельности:

    Intent gameIntent = new Intent(_context, GameActivity.class);

        gameIntent.putExtra("gameLocation", "file:///android_asset/game/index.html"); 

        ((Activity) _context).startActivity(gameIntent);

Затем я загружаю это в новом Деятельности:

gameWebView.loadUrl(getIntent().getStringExtra("gameLocation"));

Iиспользуйте те же самые настройки для WebView в обоих действиях с включенным JavaScript и т. д.

Стандартные кнопки HTML и текст отображаются нормально, но элемент canvas не отображается, хотя элемент по-прежнему занимает правильный объем пространства.

Понятия не имею, почему он не работает.Я даже попытался указать WebView на онлайн-игру Html Canvas, и это тоже не работает.Редактировать: игра, на которую я указывал, работает в моем стандартном браузере телефона и в веб-представлении Активности, которую я установил в качестве панели запуска, а именно:

<activity
        android:name=".MainActivity"
        android:configChanges="keyboardHidden|orientation"
        android:launchMode="singleTask" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Моя основная активность, в которой работает игра, имеет установленный режим запуска.на одну задачу.Я попробовал как стандартную, так и единую версию для игры Activity.

Есть идеи, что здесь может пойти не так?

РЕДАКТИРОВАТЬ: Я также попытался установить GameActivity в качестве средства запуска, и элемент Canvas работает.Похоже, что проблема возникает только при запуске игры в Деятельности, которая была запущена как Намерение.

Еще один РЕДАКТИРОВАТЬ (эта проблема действительно мне достается):

Я думаю, что проблема связана с тем фактом, что оба вида деятельности используют WebViews.Они указывают на совершенно разные ресурсы в моей папке ресурсов, но Activity A (Main) работает на JavaScript, затем Activity B (GameActivity) вызывается с намерением, а Canvas не визуализируется.Если я заменю действие A на простое действие, которое не имеет WebView и просто кнопку для запуска действия B, тогда Canvas работает в действии B. В попытке исправить это, я вызываю финиш на завершении действия A, когда запускаю намерение для B, ноэто все еще не сработало.Не уверен, какой ответ я на это ожидаю, но, возможно, кто-то здесь знает внутреннюю работу всего этого и может найти решение.

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Не уверен, поможет ли это, но есть одно предложение: попробуйте вызвать MySecondWebView.invalidate() из второго действия - это заставит WebView перерисовать себя.

В противном случае, если все, чего вы пытаетесь достичь, это разделение кода / проблем / активов, почему бы просто не перенаправить меню WebView на html-страницу игры?

document.location = "/game/index.html"

Ухта, сделай это.

1 голос
/ 07 марта 2012

Я не уверен, но несколько вещей, которые вы должны попробовать

  1. Попробуйте удалить:

    android: launchMode = "singleTask"

  2. Обнулить WebView перед запуском новой операции

  3. Попробуйте использовать Intent.FLAG_ACTIVITY_NEW_TASK, чтобы ваша активность запускалась в новой задаче, чтобы веб-представления не могли мешать
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...