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
【讨论】:
他们有如此令人沮丧的糟糕文档。这是唯一对我有用的方法,非常感谢队友! 唯一可行的方法,是的,您没听错。但他们可能会修复它。谢谢! 如果没有互联网连接。那么错误信息是什么?我得到“无” 在<head>
标签中添加<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
【参考方案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.onLine
是 true
。这很令人沮丧。
然后我发现问题只出在我的手机(Android 2.3)上,它在模拟器上有效。
我猜这个问题也可能与 Android 版本有关。
【讨论】:
【参考方案14】:PhoneGap 3.5.0:
navigator.connection.typereturned me
0(unknown connection) and
navigator.onLine(from HTML5) was
true` 一直有同样的问题。
问题是由手机引起的(可能我的手机上的 Android 版本太旧),因为它可以正确地与模拟器和平板电脑(Android 4.2 在哪里)一起使用 :-(
【讨论】:
以上是关于cordova 3.0:Android:未定义连接的主要内容,如果未能解决你的问题,请参考以下文章
Cordova aerogear-push android push 未定义
Cordova Android 自定义插件/应用程序 - 自定义插件上未找到类异常
PhoneGap 错误 - “未捕获的 ReferenceError:cordova 未定义”