web-dev-qa-db-ja.com

cordova 3.0:Android:接続が定義されていません

apache Cordova3.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]);
}

私がAndroidでプロジェクトをエミュレートすると、LogCat Error:Connection is not defined

enter image description here

私が欠けているものは何ですか? Connectionを宣言するには.jsを添付する必要がありますか?

12
panchicore

キャッチされていない参照エラー:接続が定義されていません

これは、「接続」オブジェクトの欠如に関連しています。これは、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 asのネットワークステータスに関する問題の始まりにすぎませんでした

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;
}

このコードには、checkConnection returnステートメントの後に非同期で実行される可能性のある醜いnetworkState割り当てが関数内にありますが、ネイティブコードがexecute関数内でPluginResultを返すため、これは機能します。返されたnetworkState値がnavigator.connectionと一致しません。次のような定数:

navigator.connection.WIFI

プラグインのソースコードで返される値は、次の場所で確認できます: https://github.com/Apache/cordova-plugin-network-information/blob/master/src/Android/NetworkManager.Java

12
dadasign

私は同じ問題を抱えています Phonegap 3.0 オン Android 4.2.2 Api 17

CordovaまたはPhonegaplocalの両方のコマンドを試し、Connectionプラグインを削除して再インストールしようとしましたが、機能しませんでした。

ログで気付いたのは、エラーメッセージの直後に次のとおりです。

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

だから実際はそうだと思っていました 非同期コールバック からConnection.typeを正常に初期化した後 CordovaNetworkManager() しかし、そうすべきではありません。

だから私は以下を試しました:

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 初期化するには 接続タイプ

7
benka

私はまったく同じ問題を抱えていましたが、それを修正することができました。 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

私がそれをしたら、それはうまくいきました。

5
Julian

プラグインを含めて同じ問題が発生している場合は、プラグインを含めた順序である可能性があります。

プラグインが機能するためには、プラットフォームを追加した後にプラグインを含める必要がありました。

$ cordova create

$ cordova platform add Android 

$ cordova plugin add org.Apache.cordova.network-information
4
Leo

私は解決しました:

$ phonegap local plugin add https://git-wip-us.Apache.org/repos/asf/cordova-plugin-network-information.git
3
Regis Zanandrea

私は同じ問題に直面しています。この問題について検索すると、この質問が見つかりました。私は多くのアイデアを試しましたが、1つはうまくいきました:1-ネットワーク情報プラグインをアンインストールします2-CMDで-> cordovaビルド3-プラグインを再度インストールします4-再度ビルドします。

この後、接続例は正常に機能します。

0
aolba

私はcordova3.4.1を使用してプラグインorg.Apache.cordova.network-informationを追加しています。これで問題が解決します。これを試してください。

cordovaプラグインadd org.Apache.cordova.network-information

ヘルプが言うように、私はコードのどの部分も変更しませんでした:

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

0
user3652636

コルドバ3.5の今日のようです

<access Origin="*" />

正しいCORSconfig.xmlエントリです。

私が信じる前のように、それが「uri」や「subdomains」ではなく「Origin」であることを明確にしたことに注意してください。

0
MistereeDevlord

ほぼ同時に、最後に、参照したjsプラグインをロードしないということでした。 cordova_plugins.js

プロジェクトが正しいフォルダにない場合があります...しかし、いずれの場合でも、で知られているフォルダに直接コピーできます。

アセット/ www /プラグイン/org.Apache.cordova.network-情報

network.js "

Connection.js "

そしてあなたのhtmlにロードします

0
user3495752

Cordova 3.5.0でも同じ問題が発生しました:navigator.connection.type 戻ってきた 0常にそしてnavigator.onLinetrueでした。イライラしました。

次に、問題は私の電話(Android 2.3))にのみあり、エミュレーターで機能することがわかりました。

問題はAndroidバージョンにも関係していると思います。

0
Fenix

私は同じことで遊んでいますが、cordova CLIを使用して このページ を使用して機能をインストールする必要があると思います。

0
Mardox

私にとってプラグインを追加するだけでは不十分で、問題は解決しませんでした...

次に、プラグインを追加した後、CLIで実行しました

$ cordova build

そして、すべてが完璧に機能しました!/wwwファイルがplatforms/xxx/wwwファイルの消去に使用されるため、更新されたファイルがあることを確認してください

0
Bruno

PhoneGap 3.5.0:navigator.connection.typereturned me0(unknown connection) andnavigator.onLine(from HTML5) wastrue`でいつも同じ問題が発生しました。

問題は電話が原因(おそらく私は古いAndroidバージョンが私の電話にあります))それはエミュレーターとタブレット(ここでAndroid 4.2)正しく:-(

0
Fenix

私にとっては、$(function(){})内でcheckConnection()を呼び出していたためです。それはによって呼び出されるべきです

document.addEventListener("deviceready", function(){
    checkConnection();
});
0
Sergey Dirin