Ionic: проверьте подключение к интернету с помощью Cordova
я работаю над ионной структурой и сталкиваюсь с проблемами, используя API сети Apache Cordova для обнаружения подключения к интернету в Android App. Я упомянул этой учебник, а также создал демо-проект, который работает нормально.
я следовал приведенным ниже шагам. [из учебника]
ionic start testApp sidemenu
ionic platform add android
открыть
testApp/www/js/app.js
-
копировать вставить этот код
if(window.Connection) { if(navigator.connection.type == Connection.NONE) { alert('There is no internet connection available'); }else{ alert(navigator.connection.type); } }else{ alert('Cannot find Window.Connection'); }
Установить Плагин Cordova
cordova plugin add org.apache.cordova.network-information
построить
ionic build android
Run
ionic run android
это хорошо
вопрос
- Копировать Вставить
www
Сmainproject
totestApp
и выполните шаги 6 и 7
я получаю предупреждение Cannot find Window.Connection
после копировать вставить app.js
выглядит так
.run(function($ionicPlatform) {
$ionicPlatform.ready(function() {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if(window.StatusBar) {
// org.apache.cordova.statusbar required
StatusBar.styleDefault();
}
// check internet connection
//alert(window.Connection);
alert('Hi')
try {
alert('Naviagtor says'+navigator.connection.type);
}
catch(err) {
alert( 'Error '+ err.message)
//here i get 'Error cannot read property type of undefined'
}
if(window.Connection) {
if(navigator.connection.type == Connection.NONE) {
alert('There is no internet connection available');
}else{
alert(navigator.connection.type);
}
}else{
alert('Cannot find Window.Connection');
}
});
})
момент, когда я копирую вставить мой app.js
и controllers.js
до testApp/www/js
каталог все это взрывается.
любая помощь в отладке высоко ценится.
спасибо,
Примечание
у меня есть cordova.js
на index.html
.
я повторно установлена platforms
и plugins
после копирования вставить как что ж.
5 ответов
Я решил аналогичную проблему с помощью ngcordova . Это дает вам угловую обертку вокруг плагина, который реализует обещания.
часто Плагины Cordova не готовы, когда вы пытаетесь их вызвать, используя интерфейс promise, вы можете избежать получения неопределенных ошибок.
Я украл пример со страницы ngcordova в сетевом плагине здесь.
module.controller('MyCtrl', function($scope, $rootScope, $cordovaNetwork) {
document.addEventListener("deviceready", function () {
var type = $cordovaNetwork.getNetwork()
var isOnline = $cordovaNetwork.isOnline()
var isOffline = $cordovaNetwork.isOffline()
// listen for Online event
$rootScope.$on('networkOffline', function(event, networkState){
var onlineState = networkState;
})
// listen for Offline event
$rootScope.$on('networkOffline', function(event, networkState){
var offlineState = networkState;
})
}, false);
});
для любого нового посещения и проблем с получением ответа Armed10, вы можете проверить сообщение, которое я написал, которое буквально шаг за шагом говорит вам, где и почему вы должны поместить какой-то фрагмент кода (может быть полезно, если вы только начинаете с Ionic): http://www.nikola-breznjak.com/blog/codeproject/check-network-information-change-with-ionic-famework/.
кроме того, я сделал код примера доступным свободно на Github: https://github.com/Hitman666/IonicNetworkInfo.
edit: согласно правилам StackOverflow, я добавляю содержимое сообщения здесь:
шаг за шагом о том, как сделать это сами
начните новый ионный проект, выполнив:
ionic start IonicNetworkInfo blank
затем измените каталог на вновь созданный IonicNetworkInfo:
cd IonicNetworkInfo
установить ngCordova с Bower:
bower install ngCordova
если случайно у вас нет установленного bower, вы можете установить его с помощью npm:
npm install bower -g
откройте www / index.html файл в вашем любимом редакторе, и добавить ссылку на ngCordova (чуть выше cordova.JS скрипт):
<!-- This is what you should add, the cordova below you'll already have -->
<script src="lib/ngCordova/dist/ng-cordova.min.js"></script>
<!-- cordova script (this will be a 404 during development) -->
<script src="cordova.js"></script>
установите сетевой плагин ngCordova, выполнив следующую команду в вашем терминале / командной строке (вы должны сделать это из корневого каталога Вашего приложения; Итак, в нашем случае каталог IonicNetworkInfo):
cordova plugin add org.apache.cordova.network-information
чтобы проверить, если вы успешно установили плагин, вы можете запустить следующую команду (из корневого каталога - я больше не буду повторять это; когда я говорю, что вы должны запустить некоторую команду из терминала / командной строки, что в данном случае означает из корневого каталога приложения):
cordova plugin list
вы должны увидеть следующий вывод:
> cordova plugin list
com.ionic.keyboard 1.0.4 "Keyboard"
org.apache.cordova.network-information 0.2.15 "Network Information"
откройте www/js / app.JS-файл и добавить ngCordova в список зависимостей, так что в основном первая строка выглядит так это:
angular.module('starter', ['ionic', 'ngCordova'])
создайте новый контроллер в www/js / app.файл js с именем MyCtrl со следующим содержимым:
.controller('MyCtrl', function($scope, $cordovaNetwork, $rootScope) {
document.addEventListener("deviceready", function () {
$scope.network = $cordovaNetwork.getNetwork();
$scope.isOnline = $cordovaNetwork.isOnline();
$scope.$apply();
// listen for Online event
$rootScope.$on('$cordovaNetwork:online', function(event, networkState){
$scope.isOnline = true;
$scope.network = $cordovaNetwork.getNetwork();
$scope.$apply();
})
// listen for Offline event
$rootScope.$on('$cordovaNetwork:offline', function(event, networkState){
console.log("got offline");
$scope.isOnline = false;
$scope.network = $cordovaNetwork.getNetwork();
$scope.$apply();
})
}, false);
})
в этом контроллере вы присоединяете прослушиватель событий к событию deviceready (потому что может быть, что устройство еще не было бы инициализировано при запуске этого кода), и вы получаете информацию о сети с:
$cordovaNetwork.getNetwork();
информация, о погоде вы подключены к интернету получается со следующим строка:
$scope.isOnline = $cordovaNetwork.isOnline();
затем вы регистрируете два события $cordovaNetwork: online и $cordovaNetwork: online, которые запускаются, когда устройство становится онлайн/оффлайн. В них вы просто обновляете переменные $scope (). Просто для справки, все содержание www/js / app.файл js должен быть:
// Ionic Starter App
// angular.module is a global place for creating, registering and retrieving Angular modules
// 'starter' is the name of this angular module example (also set in a <body> attribute in index.html)
// the 2nd parameter is an array of 'requires'
angular.module('starter', ['ionic', 'ngCordova'])
.run(function($ionicPlatform, $cordovaNetwork, $rootScope) {
$ionicPlatform.ready(function() {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if(window.StatusBar) {
StatusBar.styleDefault();
}
});
})
.controller('MyCtrl', function($scope, $cordovaNetwork, $rootScope) {
document.addEventListener("deviceready", function () {
$scope.network = $cordovaNetwork.getNetwork();
$scope.isOnline = $cordovaNetwork.isOnline();
$scope.$apply();
// listen for Online event
$rootScope.$on('$cordovaNetwork:online', function(event, networkState){
$scope.isOnline = true;
$scope.network = $cordovaNetwork.getNetwork();
$scope.$apply();
})
// listen for Offline event
$rootScope.$on('$cordovaNetwork:offline', function(event, networkState){
console.log("got offline");
$scope.isOnline = false;
$scope.network = $cordovaNetwork.getNetwork();
$scope.$apply();
})
}, false);
});
в индекс.html-файл, внутри тега ion-content вставьте следующий контент:
<div class="card">
<div class="item item-text-wrap">
<h1>Network: {{network}}</h1>
</div>
</div>
<div class="card">
<div class="item item-text-wrap">
<ion-toggle ng-model="isOnline" ng-checked="item.checked">
<h1 ng-show="isOnline">I'm online</h1>
<h1 ng-show="! isOnline">I'm offline</h1>
</ion-toggle>
</div>
</div>
в основном то, что мы делаем здесь-мы показываем содержимое сетевая переменная (которая подключается к $scope через контроллер). Кроме того, используя компонент ion-toggle, мы показываем уведомления "я в сети" / "я в автономном режиме".
только для справки, содержание всего индекса.HTML-файл должен выглядеть так:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title></title>
<link href="lib/ionic/css/ionic.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
<!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
<link href="css/ionic.app.css" rel="stylesheet">
-->
<!-- ionic/angularjs js -->
<script src="lib/ionic/js/ionic.bundle.js"></script>
<script src="lib/ngCordova/dist/ng-cordova.min.js"></script>
<!-- cordova script (this will be a 404 during development) -->
<script src="cordova.js"></script>
<!-- your app's js -->
<script src="js/app.js"></script>
</head>
<body ng-app="starter" ng-controller="MyCtrl">
<ion-pane>
<ion-header-bar class="bar-stable">
<h1 class="title">Ionic Blank Starter</h1>
</ion-header-bar>
<ion-content padding="true">
<div class="card">
<div class="item item-text-wrap">
<h1>Network: {{network}}</h1>
</div>
</div>
<div class="card">
<div class="item item-text-wrap">
<ion-toggle ng-model="isOnline" ng-checked="item.checked">
<h1 ng-show="isOnline">I'm online</h1>
<h1 ng-show="! isOnline">I'm offline</h1>
</ion-toggle>
</div>
</div>
</ion-content>
</ion-pane>
</body>
</html>
чтобы проверить это приложение, вы должны запустить его на своем устройстве (потому что вы не можете отключить сеть в симуляторе iOS). Если у вас есть Android-устройство, подключенное к компьютеру (и все SDK в место) вы можете запустить следующие команды, чтобы получить приложение работает на вашем Android устройстве:
ionic build android && ionic run android
просто используйте этот код в своем приложении.js внутри .запустить
if (window.Connection) {
if (navigator.connection.type == Connection.NONE) {
toast.show("Internet is disconnected on your device");
};
};
прежде чем вызывать "соединение", необходимо проверить устройство:
document.addEventListener("deviceready", function () {
...
});
если вы недавно обновили (запуск cordova 5.0), мое предположение было бы cordova-plugin-whitelist
необходимо установить. После установки добавьте это в конфиг.в XML разрешить все http / S запросы:
allow-intent href="http://\*/\*"
allow-intent href="https://\*/\*"
Shell:
ionic plugin add https://github.com/apache/cordova-plugin-whitelist.git
Config.XML-код:
<allow-navigation href="*" />