【问题标题】:how to fire my online and offline events如何触发我的线上和线下活动
【发布时间】:2014-03-17 11:15:53
【问题描述】:

我正在使用cordova 3.4。 (安卓)

我设置了 4 个要触发的事件:

  • 设备就绪
  • onResume
  • 在线
  • 离线

问题是在线和离线事件根本没有触发。

根据文档,我在设备就绪之前设置了 onResume 的侦听器,之后设置了在线/离线。

这就是我所做的。

事件脚本:

function onLoad() {
document.addEventListener("online", onGoesOnLine, false);
document.addEventListener("offline", onGoesOffLine, false);
document.addEventListener("deviceready", onDeviceReady, false);
}

function onDeviceReady() {
document.addEventListener("resume", onResumeApp, false);
var db = window.openDatabase("Database", "1.0", "MondialRelay", 200000);
db.transaction(creerBaseDonneesSiNonExist, function(err){
console.log("erf ...");
 }, function(){
  console.log("hell yeah");
 });
}

function onGoesOnLine(){
 alert("onLine");
}

function onGoesOffLine(){
 alert("offLine");
}

function onResumeApp(){
 alert("onResume");
 window.location = "offLineIndex.html";
}

config.xml:

<?xml version='1.0' encoding='utf-8'?>
<widget id="fr.mondialrelay.appli" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<preference name="loglevel" value="DEBUG" />
<feature name="App">
    <param name="android-package" value="org.apache.cordova.App" />
</feature>
<name>MondialRelay</name>
<description>
</description>
<author email="dev@cordova.apache.org" href="http://cordova.io">
</author>
<content src="index.html" />
<access origin="*" />
<feature name="NetworkStatus">
    <param name="android-package" value="org.apache.cordova.networkinformation.NetworkManager" />
</feature>
<feature name="Device">
    <param name="android-package" value="org.apache.cordova.device.Device" />
</feature>
<feature name="Geolocation">
    <param name="android-package" value="org.apache.cordova.geolocation.GeoBroker" />
</feature>
<feature name="Battery">
    <param name="android-package" value="org.apache.cordova.batterystatus.BatteryListener" />
</feature>
<plugin name="Storage" value="org.apache.cordova.Storage" />
<plugin name="Geolocation" value="org.apache.cordova.GeoBroker" />
<plugin name="NetworkStatus" value="org.apache.cordova.NetworkManager" />
</widget>

AndroidManifest.xml:

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" android:windowSoftInputMode="adjustPan" package="fr.mondialrelay.appli" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:name="MondialRelay" android:theme="@android:style/Theme.Black.NoTitleBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
</manifest>

这是我在运行“cordova plugin ls”命令时看到的:

[ 'org.apache.cordova.battery-status',
'org.apache.cordova.device',
'org.apache.cordova.geolocation',
'org.apache.cordova.network-information' ]

我认为我没有遗漏任何东西,但它仍然不起作用......

我知道这个问题已经被问过很多次了,但是即使在阅读了答案之后,我也无法弄清楚如何让它发挥作用。

首先,当我在测试时,我将应用程序设置为暂停状态以切断我的互联网连接,我认为这可能是问题所在.. 然后我用手机设置了 wifi,然后,在应用程序运行时,我只是把它关了..没有办法得到任何警报..

感谢您的帮助;) 问候。

【问题讨论】:

  • 我假设您的 onLoad 函数是从主体 onload 调用的,但实际上您应该让 deviceready 侦听器独立运行,而不是在函数内部,并附加您的 @987654328 @ 和 offline 事件侦听器在您的 onDeviceReady 函数中。 deviceready 事件将是第一个触发的事件。另外,请务必通读documentation
  • 是的,onLoad 是从体卸载中调用的。所以你的建议是删除 onload 函数,把这些行放在任何函数之外对吗?
  • 是的,将onDeviceReady 视为您的onLoad,并在该函数中添加不是deviceready 的侦听器。

标签: javascript html events plugins cordova


【解决方案1】:

没有任何效果... 我确实找到了解决该问题的方法...

  • 将您的 WWW 文件夹保存在某处。
  • 转到项目的根目录。
  • 添加所有未完成的插件
  • Cordova Build 在你的项目根目录下的科尔多瓦 CLI 中

然后复制/粘贴您之前保存的 www 文件夹的内容,而不是由 cordova CLI 创建的新文件夹(不要替换 cordova.js cordova_plugin.js 和 plugins 文件夹)

然后转到您的 Eclipse IDE,编译,它应该可以工作 :)

希望对您有所帮助。 问候。

【讨论】:

    【解决方案2】:

    在线/离线事件仅在状态更改时触发。如果需要在某个点检查连接,可以使用 navigator.network.connection.type。

    initialize: function() {
        this.bindEvents();
    },
    
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    
    function onGoesOnLine(){
        alert("onLine");
    },
    
    function onGoesOffLine(){
      alert("offLine");
    },
    
    onDeviceReady: function() {        
        document.addEventListener("offline", onGoesOffLine, false);
        document.addEventListener("online", onGoesOnLine, false);
        if((navigator.network.connection.type).toUpperCase() == "NONE" && 
           (navigator.network.connection.type).toUpperCase() == "UNKNOWN") {
            onGoesOffLine();
        }
        else {
            onGoesOnLine();
        }   
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 2021-08-18
      • 2022-01-25
      • 1970-01-01
      • 2020-10-03
      相关资源
      最近更新 更多