【问题标题】:cordova 3.0: Android: Connection is not definedcordova 3.0:Android:未定义连接
【发布时间】:2013-07-21 00:17:24
【问题描述】:

我第一次尝试 Apache Cordova 3.0。

下载lib,解压cordova-android和cordova-js并创建项目:

./create ~/Documents/andriod-projects/HelloWorld com.x.HelloWorld HelloWorld
- OK

res/xml/config.xml

<plugin name="NetworkStatus" value="org.apache.cordova.NetworkManager" />

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

在 index.js 设备上准备就绪:

bindEvents: function() {
    document.addEventListener('deviceready', this.onDeviceReady, false);
},

onDeviceReady: function() {

    var networkState = navigator.connection.type;

    var states = {};
    states[Connection.UNKNOWN]  = 'Unknown connection';
    states[Connection.ETHERNET] = 'Ethernet connection';
    states[Connection.WIFI]     = 'WiFi connection';
    states[Connection.CELL_2G]  = 'Cell 2G connection';
    states[Connection.CELL_3G]  = 'Cell 3G connection';
    states[Connection.CELL_4G]  = 'Cell 4G connection';
    states[Connection.CELL]     = 'Cell generic connection';
    states[Connection.NONE]     = 'No network connection';

    alert("Network: "+states[networkState]);
}

当我在我的安卓上模拟项目时,我在 LogCat Error:Connection is not defined:

我错过了什么?我必须附加一个 .js 才能声明 Connection?

【问题讨论】:

    标签: cordova phonegap-plugins


    【解决方案1】:

    未捕获的引用错误:未定义连接

    与缺少“连接”对象有关,根据我对 corodva 3.1.0 的经验,即使按照 benka 建议的延迟,该对象也不可用。这个特殊问题可以通过使用 navigator.connection 对象的常量来解决,如下所示:

    var states = {};
    states[navigator.connection.UNKNOWN]  = 'Unknown connection';
    states[navigator.connection.ETHERNET] = 'Ethernet connection';
    states[navigator.connection.WIFI]     = 'WiFi connection';
    states[navigator.connection.CELL_2G]  = 'Cell 2G connection';
    states[navigator.connection.CELL_3G]  = 'Cell 3G connection';
    states[navigator.connection.CELL_4G]  = 'Cell 4G connection';
    states[navigator.connection.CELL]     = 'Cell generic connection';
    states[navigator.connection.NONE]     = 'No network connection';
    

    不幸的是,这只是 android 上网络状态问题的开始

    navigator.connection.type
    

    将始终返回 0,即未知连接。在 android 模拟器和设备上。对我有用的解决方法是直接调用插件类:

    document.addEventListener("deviceready", onDeviceReady, false);
    function onDeviceReady() {
        var conn = checkConnection();
        alert("Connection:"+conn);
    
    
    }
    function checkConnection(){
            var networkState;
            var test = cordova.exec(
                    function(winParam) {networkState = winParam;},
                    function(error) {alert("Network Manager error: "+error);},
                    "NetworkStatus",
                    "getConnectionInfo",
                    []
            );
            return networkState;
    }
    

    此代码在函数内部有一个丑陋的 networkState 分配,该函数可能在 checkConnection 返回语句之后异步执行,但由于本机代码在执行函数内部返回 PluginResult - 这是有效的。返回的 networkState 值与 navigator.connection 不匹配。像这样的常量:

    navigator.connection.WIFI
    

    您可以在此处查看插件源代码中返回的值:https://github.com/apache/cordova-plugin-network-information/blob/master/src/android/NetworkManager.java

    【讨论】:

    • 他们有如此令人沮丧的糟糕文档。这是唯一对我有用的方法,非常感谢队友!
    • 唯一可行的方法,是的,您没听错。但他们可能会修复它。谢谢!
    • 如果没有互联网连接。那么错误信息是什么?我得到“无”
    • &lt;head&gt;标签中添加&lt;script type="text/javascript" charset="utf-8" src="cordova.js"&gt;&lt;/script&gt;
    【解决方案2】:

    我在 Android 4.2.2 Api 17 上使用 Phonegap 3.0 遇到了同样的问题。

    尝试删除并重新安装 Connection 插件,同时尝试两个命令:Cordova 或 Phonegap local,但没有成功。

    我在日志中注意到错误消息之后的内容如下:

    10-11 14:31:40.360: E/Web Console(): Uncaught ReferenceError: Connection is not defined
    10-11 14:31:40.380: D/CordovaNetworkManager(): Connection Type: wifi
    

    所以我在想,在从 CordovaNetworkManager() 成功初始化 Connection.type 之后,它实际上看起来像是一个 异步回调,但它不应该是。 p>

    所以我尝试了以下方法:

    var networkState = navigator.connection.type;
    
    setTimeout(function(){
        networkState = navigator.connection.type;
        alert('networkState = '+networkState);
    
        var states = {};
        states[Connection.UNKNOWN]  = 'Unknown connection';
        states[Connection.ETHERNET] = 'Ethernet connection';
        states[Connection.WIFI]     = 'WiFi connection';
        states[Connection.CELL_2G]  = 'Cell 2G connection';
        states[Connection.CELL_3G]  = 'Cell 3G connection';
        states[Connection.CELL_4G]  = 'Cell 4G connection';
        states[Connection.CELL]     = 'Cell generic connection';
        states[Connection.NONE]     = 'No network connection';
    
        alert('Connection type: ' + states[networkState]);
     }, 500);
    

    我知道它看起来有点愚蠢,但每次都有效。 它的作用是首先调用 navigator.connection.type 然后运行整个函数 500ms 稍后给 CordovaNetworkManager 时间来初始化 连接类型

    【讨论】:

    • 谢谢。经过搜索和搜索,这是唯一可靠地为我提供准确网络状态的解决方案。
    【解决方案3】:

    我遇到了同样的问题,但能够解决它。按照 Phonegap Connection 文档运行以下命令似乎不起作用:

    $ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git
    $ cordova plugin rm org.apache.cordova.core.network-information
    

    相反,我不得不使用:

    $ phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git
    

    一旦我这样做了,它就起作用了。

    【讨论】:

    • 我没有phonegap。
    • 这基本上意味着官方插件坏了吗?似乎是一个非常基本的问题,它没有将 Connection 常量对象注册到窗口。
    【解决方案4】:

    如果您已包含该插件并且遇到相同的问题,则可能是您包含该插件的顺序。

    为了使插件工作,我必须在添加平台后包含该插件。

    $ cordova create
    
    $ cordova platform add android 
    
    $ cordova plugin add org.apache.cordova.network-information
    

    【讨论】:

      【解决方案5】:

      我解决了:

      $ phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git
      

      【讨论】:

        【解决方案6】:

        我正在使用 cordova 3.4.1 添加插件 org.apache.cordova.network-information 它解决了我的问题,试试这个:

        cordova 插件添加 org.apache.cordova.network-information

        正如帮助所说,我没有更改代码的任何部分:

        https://github.com/apache/cordova-plugin-network-information/blob/master/doc/index.md

        【讨论】:

          【解决方案7】:

          我正在玩同样的事情,我认为您需要使用 cordova CLI 使用this page 安装功能。

          【讨论】:

            【解决方案8】:

            对我来说,添加插件还不够,也没有解决我的问题...

            然后我在添加插件后在 CLI 中做了

            $ cordova build
            

            一切都很完美!确保您的 /www 文件具有更新的文件,因为它将用于擦除平台/xxx/www 文件

            【讨论】:

            • 刚刚在我的回答中警告过你:/
            【解决方案9】:

            我遇到了同样的问题,搜索这个问题我发现了这个问题。我尝试了很多想法,但一个确实有效的是: 1-卸载网络信息插件 2-在 CMD -> 科尔多瓦构建 3-再次安装插件 4- 再次构建。

            在此之后连接示例工作正常。

            【讨论】:

              【解决方案10】:

              最后几乎同时没有加载引用的 js 插件。 cordova_plugins.js

              您的项目可能不在正确的文件夹中...但无论如何您都可以直接复制到已知的文件夹中。

                       assets / www / plugins / org.apache.cordova.network-information

                    network.js "

                    Connection.js "

              并加载到您的 html 中

              【讨论】:

              • 这里的句子结构使这几乎无法理解。你能重组吗?
              【解决方案11】:

              对我来说,这是因为我在 $(function(){}) 中调用了 checkConnection()。 它应该由

              调用
              document.addEventListener("deviceready", function(){
                  checkConnection();
              });
              

              【讨论】:

                【解决方案12】:

                现在看来在科尔多瓦 3.5 中的日子

                <access origin="*" />
                

                是正确的 CORS config.xml 条目。

                注意澄清它是“ORIGIN”而不是“uri”和“子域”,就像我之前相信的那样。

                【讨论】:

                  【解决方案13】:

                  我在使用 Cordova 3.5.0 时遇到了同样的问题:navigator.connection.type 一直返回 0,而 navigator.onLinetrue。这很令人沮丧。

                  然后我发现问题只出在我的手机(Android 2.3)上,它在模拟器上有效。

                  我猜这个问题也可能与 Android 版本有关。

                  【讨论】:

                    【解决方案14】:

                    PhoneGap 3.5.0:navigator.connection.typereturned me0(unknown connection) andnavigator.onLine(from HTML5) wastrue` 一直有同样的问题。

                    问题是由手机引起的(可能我的手机上的 Android 版本太旧),因为它可以正确地与模拟器和平板电脑(Android 4.2 在哪里)一起使用 :-(

                    【讨论】:

                      猜你喜欢
                      • 2017-09-08
                      • 2017-10-28
                      • 2018-11-13
                      • 2014-02-14
                      • 1970-01-01
                      • 2011-12-04
                      • 2021-06-17
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多