PhoneGap没有在Android 4.2上启动deviceready

时间:2012-11-17 18:48:44

标签: android events cordova

我在Windows上使用create.bat创建了一个应用程序,并使用ADT和最新的SDK对其进行了编译。

它启动并显示cordova显示屏,但它不会触发deviceready事件,因为它一直说“连接到设备”。这同样适用于仿真器。当我将模拟器的操作系统更改为4.0时,它可以工作。

这是正常的,因为4.2刚刚发布,我必须等待更新吗?

6 个答案:

答案 0 :(得分:29)

我在Android 4.2的Nexus 7上遇到了同样的问题 但是当我将AndroidManifest targetSdkVersion更改为“16”

时,它可以正常工作
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />   (Before it was ="17")

我希望这适用于某人。

答案 1 :(得分:17)

现在是凌晨1点,我终于让我的应用再次运行了。 Android 4.2包含一些与webView.addJavascriptInterface相关的安全相关更改,这会使默认桥接模式停止工作。

我希望在下一个版本中有更好的修复,但是如果你需要快速修复,请尝试更新到CordovaWebView.exposeJsInterface

private void exposeJsInterface() {
    int SDK_INT = Build.VERSION.SDK_INT;
    boolean isHoneycomb = (SDK_INT >= Build.VERSION_CODES.HONEYCOMB && SDK_INT <= Build.VERSION_CODES.HONEYCOMB_MR2);
    if (isHoneycomb || (SDK_INT < Build.VERSION_CODES.GINGERBREAD)) {
        Log.i(TAG, "Disabled addJavascriptInterface() bridge since Android version is old.");
        // Bug being that Java Strings do not get converted to JS strings automatically.
        // This isn't hard to work-around on the JS side, but it's easier to just
        // use the prompt bridge instead.
        return;            
    } else if (SDK_INT < Build.VERSION_CODES.HONEYCOMB && Build.MANUFACTURER.equals("unknown")) {
        // addJavascriptInterface crashes on the 2.3 emulator.
        Log.i(TAG, "Disabled addJavascriptInterface() bridge callback due to a bug on the 2.3 emulator");
        return;

    } else if (SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR1) {            
        Log.i(TAG, "Disabled addJavascriptInterface() bridge callback for 4.2");
        return;


    }
    this.addJavascriptInterface(exposedJsApi, "_cordovaNative");
}

答案 2 :(得分:9)

在我的情况下,自动生成的index.html指的是 phonegap.js

所以而不是

<script type="text/javascript" src="phonegap.js"></script>

我把

<script type="text/javascript" src="cordova.js"></script>

答案 3 :(得分:2)

显然,这已在Phonegap 2.3.0中修复。

在Android 4.2上也遇到了这个问题,我的项目使用的是Phonegap 2.2。

更新了此simple upgrade procedure - 问题已解决。

因此,升级到2.3.0后,再次设置android:targetSdkVersion="17"即可。

答案 4 :(得分:0)

另一个原因是您的cordova-2.3.0.jar可能与cordova-2.3.0.js文件版本不匹配。

答案 5 :(得分:0)

我通过删除js文件(Index.js)中的任何错误解决了我的问题。

你必须确保你的javascript没有任何错误。