cordova 3.0:Android:未定义连接

Posted

技术标签:

【中文标题】cordova 3.0:Android:未定义连接【英文标题】:cordova 3.0: Android: Connection is not defined 【发布时间】: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?

【问题讨论】:

【参考方案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 在哪里)一起使用 :-(

【讨论】:

以上是关于cordova 3.0:Android:未定义连接的主要内容,如果未能解决你的问题,请参考以下文章

Cordova aerogear-push android push 未定义

Cordova Android 自定义插件/应用程序 - 自定义插件上未找到类异常

Android 目标:未安装且插件安装失败 Cordova

PhoneGap 错误 - “未捕获的 ReferenceError:cordova 未定义”

Cordova 3.0,应用程序错误与服务器的连接不成功。 (超时)

Cordova:如何将现有的自定义插件 2.3 添加到项目 3.0 中