#javascript #android #angularjs #ionic-framework #ionic-popup
#javascript #Android #angularjs #ionic-framework #ionic-всплывающее окно
Вопрос:
я разрабатываю приложение для конференций, которое управляется данными и будет постоянно обновляться с веб-сервера. я сохраняю данные в локальном хранилище для сохранения, но когда приложение установлено и запущено в первый раз, я хочу, чтобы появилось сообщение «Нет подключения к Интернету» и закрыть приложение, когда они нажимают любую кнопку во всплывающем окне. но когда есть Интернет, загрузите приложение. я сделал это в своей функции app.run, но она не работает.
var app = angular.module('starter', ['ionic', 'ionic-material', 'ngCordova']);
app.run(function ($ionicPlatform, $ionicPopup, $timeout) {
$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 amp;amp; window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if (window.StatusBar) {
StatusBar.styleDefault();
}
//checking for internet connection on startup
if (window.Connection) {
if (navigator.connection.type === Connection.NONE) {
document.addEventListener("offline", function () {
$ionicPopup.confirm({
title: "Internet Disconected",
content: "Sorry, No internet connection now, please try again"
}).then(function (result) {
if (!result) {
$ionicPlatform.exitApp();
}
});
}, false);
}
}
});
});
приложение выдает сообщение, но при нажатии любой из кнопок (ok и отмена) приложение просто остается на белом экране. он не выходит из приложения.
я не знаю, что я делаю не так. пожалуйста, мне нужны советы и примеры кода, чтобы исправить мою ошибку.
Ответ №1:
Несколько аспектов, которые следует иметь в виду:
-
сообщается, что ваша реализация ExitApp() не работает на устройствах iOS
-
уничтожение приложения — это большой недостаток для удобства использования, вам лучше представить интерфейс с последними сохраненными данными или, если какие-либо данные кэшируются, сообщение «нет сетевого подключения», встроенное в макет приложения (проверьте Spotify для примера)
В любом случае ваша цель может быть достигнута с ngCordova.plugins.network
помощью модуля, входящего в http://ngcordova.com /
Это пример службы, которая возвращает текущее состояние сети:
angular.module('app.common.connectivity', [
'ngCordova.plugins.network'
])
.service('ConnectivityService', function($cordovaNetwork) {
this.isOnline = $cordovaNetwork.isOnline() || false;
});
Вы можете добавить этот модуль и внедрить сервис там, где это необходимо, например, в:
var app = angular.module('starter', ['ionic', 'ionic-material', 'app.common.connectivity']);
app.run(function ($ionicPlatform, $ionicPopup, $timeout, ConnectivityService) {
$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 amp;amp; window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if (window.StatusBar) {
StatusBar.styleDefault();
}
//checking for internet connection on startup
if( !ConnectivityService.isOnline amp;amp; !window.localStorage.appLaunched ) {
$ionicPopup.confirm({
title: "Internet Disconected",
content: "Sorry, No internet connection now, please try again"
})
.then(function(result) {
$ionicPlatform.exitApp();
});
}
// Apparently we're online so remember we already have been here
if ( !localStorage.appLaunched ) localStorage.appLaunched = true;
});
});
Комментарии:
1. спасибо, Энрико, я пытаюсь проверить наличие соединения, когда пользователь загружает приложение в первый раз. я уже загружаю данные из локального хранилища в каждый из моих контроллеров (хотя это плохая практика), но мне нужно проверить наличие подключения к Интернету и выйти из приложения, если пользователь никогда раньше не открывал приложение с подключением к Интернету. и если он загрузился с подключением к Интернету один раз … мне нужно, чтобы обойти эту функцию и перейти к моей логике контроллеров, которая будет загружать данные из локального хранилища. вы можете проверить мои коды здесь .
2. Только что исправлена ошибка в моем фрагменте (я не отменял ConnectivityService.IsOnline, теперь это так). Вы можете сохранить переменную в localstorage при первом подключении пользователя к Сети и использовать это значение для обхода принудительного выхода. Я собираюсь обновить ответ.
Ответ №2:
Читая их документ, в нем говорится, что нужно использовать
ionic.Platform.exitApp();
Для выхода из приложения.
Также вы проверили, что ваш код даже соответствует этому условию.