cordova 3.0:Android:没有定义连接

pan*_*ore 12 phonegap-plugins cordova

我第一次尝试使用Apache Cordova 3.0.

下载了lib,unziped cordova-android和cordova-js并创建了一个项目:

./create ~/Documents/andriod-projects/HelloWorld com.x.HelloWorld HelloWorld
- OK
Run Code Online (Sandbox Code Playgroud)

RES/XML/config.xml中

<plugin name="NetworkStatus" value="org.apache.cordova.NetworkManager" />
Run Code Online (Sandbox Code Playgroud)

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" />
Run Code Online (Sandbox Code Playgroud)

在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]);
}
Run Code Online (Sandbox Code Playgroud)

当我在我的andriod上模拟项目时,我得到了LogCat Error:Connection is not defined:

在此输入图像描述

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

dad*_*ign 12

未捕获的参考错误:未定义连接

与缺少"连接"对象有关,根据我对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';
Run Code Online (Sandbox Code Playgroud)

不幸的是,在我的情况下,这只是android上网络状态问题的开始

navigator.connection.type
Run Code Online (Sandbox Code Playgroud)

将始终返回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;
}
Run Code Online (Sandbox Code Playgroud)

此代码在函数内部有一个丑陋的networkState赋值,它可能在checkConnection return语句之后异步执行,但是当本机代码在execute函数内返回PluginResult时 - 这是有效的.返回的networkState值与navigator.connection不匹配.常数如:

navigator.connection.WIFI
Run Code Online (Sandbox Code Playgroud)

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

  • 他们有令人沮丧的令人沮丧的穷人文件.这是它对我有用的唯一方式,非常感谢伙伴! (2认同)

ben*_*nka 7

我在Android 4.2.2 Api 17上遇到了与Phonegap 3.0相同的问题.

尝试删除并重新安装Connection插件尝试这两个命令:Cordova或Phonegap本地但不起作用.

我在日志中注意到的是ERROR消息后面的以下内容:

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
Run Code Online (Sandbox Code Playgroud)

所以我认为它实际上看起来像是从CordovaNetworkManager()成功初始化Connection.type后的异步回调,但它不应该.

所以我尝试了以下方法:

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);
Run Code Online (Sandbox Code Playgroud)

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


Jul*_*ian 5

我有同样的问题,但能够解决它.根据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
Run Code Online (Sandbox Code Playgroud)

相反,我不得不使用:

$ phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git
Run Code Online (Sandbox Code Playgroud)

一旦我这样做,它就有效了.


Leo*_*Leo 5

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

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

$ cordova create

$ cordova platform add android 

$ cordova plugin add org.apache.cordova.network-information
Run Code Online (Sandbox Code Playgroud)


小智 0

我正在玩同样的事情,我认为您需要通过使用 cordova CLI 来安装使用此页面的功能。