cordova 3.0:Android:未定义连接
我第一次尝试使用ApacheCordova3.0 下载lib,解压cordova android和cordova js并创建了一个项目:cordova 3.0:Android:未定义连接,cordova,phonegap-plugins,Cordova,Phonegap Plugins,我第一次尝试使用ApacheCordova3.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" />
./create ~/Documents/andriod-projects/HelloWorld com.x.HelloWorld HelloWorld
- OK
res/xml/config.xml
<plugin name="NetworkStatus" value="org.apache.cordova.NetworkManager" />
当我在andriod上模拟项目时,我在LogCat中得到了错误:未定义连接:
我错过了什么?我必须附加一个.js才能声明连接?我正在玩同样的东西,我认为您需要使用cordova CLI安装这些功能。我遇到了同样的问题,但能够解决它。按照Phonegap连接文档运行以下命令似乎不起作用:
$ 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
一旦我这么做了,它就成功了。如果你已经包含了插件,并且遇到了同样的问题,那么可能是你包含插件的顺序
为了让插件正常工作,我必须在添加平台后加入插件
$ cordova create
$ cordova platform add android
$ cordova plugin add org.apache.cordova.network-information
我决定:
$ phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git
Android 4.2.2 Api 17上的Phonegap 3.0也有同样的问题
尝试删除并重新安装连接插件,尝试了两个命令:Cordova或Phonegap local,但均无效
我在日志中注意到的是错误消息之后的以下内容:
10-11 14:31:40.360:E/Web控制台():未捕获引用错误:未定义连接
10-11 14:31:40.380:D/CordovaNetworkManager():连接类型:wifi
所以我认为,在成功地从CordovaNetworkManager()初始化Connection.type之后,它实际上看起来像是一个异步回调,但不应该是这样
因此,我尝试了以下方法:
var networkState=navigator.connection.type;
setTimeout(函数(){
networkState=navigator.connection.type;
警报(“网络状态=”+网络状态);
变量状态={};
状态[Connection.UNKNOWN]=“未知连接”;
状态[Connection.ETHERNET]=“以太网连接”;
状态[Connection.WIFI]=“WIFI连接”;
状态[Connection.CELL_2G]=“CELL 2G Connection”;
状态[Connection.CELL_3G]=“CELL 3G Connection”;
状态[Connection.CELL_4G]=“CELL 4G Connection”;
状态[Connection.CELL]=“单元通用连接”;
状态[Connection.NONE]=“无网络连接”;
警报('连接类型:'+状态[网络状态]);
}, 500);
我知道这看起来有点愚蠢,但每次都有效。
它首先调用navigator.connection.type,然后在500毫秒后运行整个函数,让CordovaNetworkManager有时间初始化connection.type
未捕获引用错误:未定义连接
与缺少“连接”对象有关,根据我使用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返回语句之后异步执行,但当本机代码在execute函数中返回PluginResult时,它就起作用了。返回的networkState值与navigator.connection不匹配。常数,如:
navigator.connection.WIFI
您可以在这里看到插件源代码中返回的值:对于我来说,添加插件是不够的,并且没有解决我的问题
然后在添加插件后,我在CLI中执行了此操作
$ cordova build
一切都很完美!确保您的/www文件具有更新的文件,因为它将用于删除平台/xxx/www文件我面临同样的问题,搜索此问题时我发现了此问题。我尝试了很多想法,但成功的是:
1-卸载网络信息插件
2-在CMD->cordova构建中
3-再次安装插件
4-再次构建
在此之后,连接示例工作正常 最后的一点是,没有加载引用的js插件。
cordova_plugins.js
您的项目可能不在正确的文件夹中。。。但在任何情况下,您都可以直接复制到已知的文件夹中
assets/www/plugins/org.apache.cordova.network-information
network.js“
Connection.js“
并加载到您的html中我正在使用cordova 3.4.1添加插件org.apache.cordova.network-information如果要解决我的问题,请尝试以下操作:
cordova插件添加org.apache.cordova.network information
我没有更改代码的任何部分,如帮助所述:
对我来说,这是因为我在$(function(){})内调用了checkConnection()。
它应该被称为
document.addEventListener("deviceready", function(){
checkConnection();
});
现在科尔多瓦的天3.5似乎
<access origin="*" />
是正确的CORS config.xml条目
请注意,关于它是“源”而不是“uri”和“子域”的澄清,正如我之前所认为的那样。我对Cordova 3.5.0有同样的问题:navigator.connection.type
始终返回0
,而navigator.onLine
是true
。这令人沮丧
然后我发现问题只出现在我的手机上(安卓2.3),并且它在emulator上工作
我猜这个问题也与Android版本有关 我在phonegap3.5.0上也遇到了同样的问题:
navigator.connection.type返回我0(未知连接)和
navigator.onLine(来自HTML5)始终是
真的
这个问题是由手机引起的(可能我手机上的Android版本太旧了),因为它与emulator和tablet一起工作(Android在哪里
document.addEventListener("deviceready", function(){
checkConnection();
});
<access origin="*" />