Html5 Canvas在主活动的WebView中工作,但在使用同一应用程序中的intent调用的Activity的WebView中停止工作

时间:2012-02-28 16:31:41

标签: android webview html5-canvas

我正在测试的设备正在运行Android 2.3.4。

我有一个Html5 / JavaScript游戏。

最初我在同一个Activity中有我的菜单和游戏,它运行良好。我刚刚从Assets文件夹中加载了游戏URL。

我想改变它,以便我在一个新的Activity中启动游戏:

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

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

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

然后我将它加载到新的Activity中:

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

我在启用JavaScript的两个活动中使用与WebView完全相同的设置等。

标准HTML按钮和文本渲染正常但画布元素不会渲染,尽管元素仍然占用了正确的空间量。

我不知道它为什么不起作用。我甚至尝试将WebView指向在线Html Canvas游戏,但这也无效。 编辑:我指向的游戏可以在我的标准手机浏览器和我设置为启动器的活动的WebView中工作,即:

<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尝试了标准游戏和singleTop游戏。

任何想法可能会出错?

修改 我也尝试将GameActivity设置为启动器并且Canvas元素可以工作。似乎只有在作为Intent启动的Activity中运行游戏时才会出现问题。

又一次编辑(这个问题真的让我感到高兴):

我认为问题源于这两个活动都在使用WebViews。它们指向我的资源文件夹中完全不同的资源,但是活动A(主要)正在运行JavaScript,然后使用intent调用活动B(GameActivity),并且Canvas不呈现。如果我将活动A替换为没有WebView的普通活动而只是用于启动活动B的按钮,那么Canvas在活动B中工作。试图解决这个问题,我在活动A上调用完成,因为我启动了B的意图但是仍然没有奏效。不确定我期待什么样的答案,但也许有人知道这一切的内部运作并有可能的解决方案。

2 个答案:

答案 0 :(得分:1)

我不确定你应该尝试一些事情

  1. 尝试删除:

    android:launchMode =“singleTask”

  2. 在启动新活动

  3. 之前使WebView为null
  4. 尝试使用Intent.FLAG_ACTIVITY_NEW_TASK,以便您的Activity在新任务中启动,以便WebViews无法干扰

答案 1 :(得分:1)

不确定这是否有帮助,但这是一个建议:尝试从第二个Activity中调用MySecondWebView.invalidate() - 这将强制WebView重绘自己。

如果不这样做,如果您想要实现代码/关注/资产的分离,为什么不将菜单重定向到游戏的html页面?

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

Oughta这样做。