gpt4 book ai didi

android - 连接未在 cordova 网络信息插件中定义

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:43:04 28 4
gpt4 key购买 nike

我已关注这篇文章:

to get network information of the device在适用于 Android 的 ionic 应用程序中。

它在浏览器上运行良好,但是当我在 android 手机上安装编译后的 apk 时,它给出了一个错误,提示 Reference error : Connection is not defined. 在我使用 $cordovaNetwork 的行.isOnline();

我一直在绞尽脑汁并进行了应有的研究,并尝试按照建议的顺序卸载和安装它,但没有帮助。

帮我解决这个问题。此问题可能不是代码问题,可能需要一些巧妙的修复才能使其正常工作。

正在讨论同样的问题here但我还没有真正理解给定的代码 fragment 来自哪里。

index.html :

<!DOCTYPE html>
<html ng-app="starter" >
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

<title></title>
<link href="lib/ionic/css/ionic.css" rel="stylesheet">
<!-- <link href="lib/ionic/css/angular-datepicker.min.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">
-->
<!-- angular date picker css-->
<link href="lib/datePicker/css/angular-pickadate.css" rel="stylesheet">

<script src="lib/ionic/js/ionic.bundle.js"></script>
<script src="lib/ionic/js/highcharts-ng.js"></script>
<script src="lib/ionic/js/jquery.min.js"></script>
<script src="lib/ionic/js/highcharts.js"></script>
<script src="lib/ionic/js/ngStorage.min.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>
<script src="js/controllers.js"></script>





</head>
<body ng-controller="LoginCtrl">

<ion-nav-bar class="mob-bar-balanced">
<!-- <ion-nav-back-button>
</ion-nav-back-button> -->
</ion-nav-bar>
<ion-nav-view></ion-nav-view>
</body>
</html>

app.js:

app.factory('ConnectivityMonitor', ['$rootScope', '$cordovaNetwork', function($rootScope, $cordovaNetwork){
return {
isOnline: function(){
if(ionic.Platform.isWebView()){
$rootScope.online = $cordovaNetwork.isOnline();
return $cordovaNetwork.isOnline();
} else {
$rootScope.online = navigator.onLine;
return navigator.onLine;
}
},
isOffline: function(){
if(ionic.Platform.isWebView()){
$rootScope.online = $cordovaNetwork.isOnline();
return !$cordovaNetwork.isOnline();
} else {
$rootScope.online = navigator.onLine;
return !navigator.onLine;
}
},
startWatching: function(){
if(ionic.Platform.isWebView()){

$rootScope.$on('$cordovaNetwork:online', function(event, networkState){
$rootScope.online =true;
console.log("went online");
});

$rootScope.$on('$cordovaNetwork:offline', function(event, networkState){
$rootScope.online =false;
console.log("went offline");
});

}
else {

window.addEventListener("online", function(e) {
$rootScope.online =true;
console.log("went online");
}, false);

window.addEventListener("offline", function(e) {
$rootScope.online =false;
console.log("went offline");
}, false);
}
}
}
}]);

.config(function($stateProvider,$urlRouterProvider){
$stateProvider
.state('Login',{
url:'/login',
onEnter:["$state","$localStorage", '$rootScope' , '$ionicViewSwitcher',function($state,$localStorage, $rootScope, $ionicViewSwitcher){
if((typeof($localStorage.userInfo)!== 'undefined') && (Object.keys($localStorage.userInfo).length !== 0)) {
$ionicViewSwitcher.nextTransition('none');
$state.go("Deployment");

}
}],
templateUrl:'templates/login.html',
controller:'LoginCtrl',
resolve: {
online: function(ConnectivityMonitor){
return ConnectivityMonitor.isOnline();
}
}
})

最佳答案

我不知道你提到的教程,但是,你可能想查看我写的帖子,它一步一步地告诉你应该在哪里以及为什么应该放置一些代码(如果你只是从 Ionic 开始):http://www.nikola-breznjak.com/blog/codeproject/check-network-information-change-with-ionic-famework/ .

另外,我在 Github 上免费提供了示例代码:https://github.com/Hitman666/IonicNetworkInfo .您可以下载该项目(如果您不想自己完成这些步骤)为您的设备构建它并在设备上进行测试。

以下是博客文章中的步骤:

开始一个新的 Ionic 项目:

ionic start IonicNetworkInfo blank

然后,将目录更改为新创建的 IonicNetworkInfo:

cd IonicNetworkInfo

使用 Bower 安装 ngCordova:

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 ,内容如下:

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

在这个 Controller 中,你在 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);
});

在 index.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>

基本上我们在这里所做的是显示网络变量的内容(通过 Controller 附加到 $scope)。此外,通过使用 ion-toggle 组件,我们显示“我在线”/“我离线”通知。

仅供引用,整个 index.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

关于android - 连接未在 cordova 网络信息插件中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32202026/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com