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
:
私が欠けているものは何ですか? Connectionを宣言するには.jsを添付する必要がありますか?
キャッチされていない参照エラー:接続が定義されていません
これは、「接続」オブジェクトの欠如に関連しています。これは、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
私は同じ問題を抱えています 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 初期化するには 接続タイプ。
私はまったく同じ問題を抱えていましたが、それを修正することができました。 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
私がそれをしたら、それはうまくいきました。
プラグインを含めて同じ問題が発生している場合は、プラグインを含めた順序である可能性があります。
プラグインが機能するためには、プラットフォームを追加した後にプラグインを含める必要がありました。
$ 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
私は同じ問題に直面しています。この問題について検索すると、この質問が見つかりました。私は多くのアイデアを試しましたが、1つはうまくいきました:1-ネットワーク情報プラグインをアンインストールします2-CMDで-> cordovaビルド3-プラグインを再度インストールします4-再度ビルドします。
この後、接続例は正常に機能します。
私は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
コルドバ3.5の今日のようです
<access Origin="*" />
正しいCORSconfig.xmlエントリです。
私が信じる前のように、それが「uri」や「subdomains」ではなく「Origin」であることを明確にしたことに注意してください。
ほぼ同時に、最後に、参照したjsプラグインをロードしないということでした。 cordova_plugins.js
プロジェクトが正しいフォルダにない場合があります...しかし、いずれの場合でも、で知られているフォルダに直接コピーできます。
アセット/ www /プラグイン/org.Apache.cordova.network-情報
network.js "
Connection.js "
そしてあなたのhtmlにロードします
Cordova 3.5.0でも同じ問題が発生しました:navigator.connection.type
戻ってきた 0
常にそしてnavigator.onLine
はtrue
でした。イライラしました。
次に、問題は私の電話(Android 2.3))にのみあり、エミュレーターで機能することがわかりました。
問題はAndroidバージョンにも関係していると思います。
私は同じことで遊んでいますが、cordova CLIを使用して このページ を使用して機能をインストールする必要があると思います。
私にとってプラグインを追加するだけでは不十分で、問題は解決しませんでした...
次に、プラグインを追加した後、CLIで実行しました
$ cordova build
そして、すべてが完璧に機能しました!/wwwファイルがplatforms/xxx/wwwファイルの消去に使用されるため、更新されたファイルがあることを確認してください
PhoneGap 3.5.0:
navigator.connection.typereturned me
0(unknown connection) and
navigator.onLine(from HTML5) was
true`でいつも同じ問題が発生しました。
問題は電話が原因(おそらく私は古いAndroidバージョンが私の電話にあります))それはエミュレーターとタブレット(ここでAndroid 4.2)正しく:-(
私にとっては、$(function(){})内でcheckConnection()を呼び出していたためです。それはによって呼び出されるべきです
document.addEventListener("deviceready", function(){
checkConnection();
});