菜鸟教程小白 发表于 2022-12-13 00:04:44

ios - 在 cordova 3.5.0 中未调用离线和在线事件


                                            <p><p>我正在使用 cordova 3.5.0 开发我的 phonegap 应用程序。在那我想在网络服务调用之前检查互联网连接。所以我使用命令 <code>cordova plugin add org.apache.cordova.network-information</code> 添加了网络状态插件。插件成功安装在我的应用程序中。 </p>

<p>添加插件后,我添加了 2 个 EventListener,一个用于在线,另一个用于离线。 </p>

<pre><code>var app = {
    // Application Constructor
    initialize: function() {
      console.log(&#39;App initializing...&#39;);
      this.bindEvents();
    },
    // Bind Event Listeners
    //
    // Bind any events that are required on startup. Common events are:
    // &#39;load&#39;, &#39;deviceready&#39;, &#39;offline&#39;, and &#39;online&#39;.
    bindEvents: function() {
      //This is to allow testing in desktop browser where there is no device ready event
      if (navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/)) {
            document.addEventListener(&#39;deviceready&#39;, this.onDeviceReady, false);
    document.addEventListener(&#34;offline&#34;, onOffline, false);
    document.addEventListener(&#34;online&#34;, onOnline, false);

      } else {
            this.onDeviceReady();
      }

    },
    // deviceready Event Handler
    //
    // The scope of &#39;this&#39; is the event. In order to call the &#39;receivedEvent&#39;
    // function, we must explicity call &#39;app.receivedEvent(...);&#39;
    onDeviceReady: function() {
      StatusBar.overlaysWebView(false);
      app.receivedEvent(&#39;deviceready&#39;);
    },
onOnline:function(){
   console.log(&#34;Online&#34;);
    }.
   onOffline: function(){
   console.log(&#34;Offline&#34;);
    },
    // Update DOM on a Received Event
    receivedEvent: function(id) {
      require([&#39;router&#39;], function(Router){
            Router.getInstance();
            console.log(&#39;Backbone callback...&#39;);
      });
    }
    };
</code></pre>

<p>所以我使用了另一种方法来检查 Phonegap 文档中提到的在线状态</p>

<pre><code>function checkConnection() {
    var networkState = navigator.network.connection.type;

    var states = {};
    states= &#39;Unknown connection&#39;;
    states = &#39;Ethernet connection&#39;;
    states   = &#39;WiFi connection&#39;;
    states= &#39;Cell 2G connection&#39;;
    states= &#39;Cell 3G connection&#39;;
    states= &#39;Cell 4G connection&#39;;
    states   = &#39;No network connection&#39;;

    alert(&#39;Connection type: &#39; + states);
}
</code></pre>

<p>始终返回连接到互联网的模式,例如“WiFi 连接”。虽然我改变了我断开的互联网连接。</p>

<p>帮我解决这个问题。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我遇到了同样的问题:online/offline 事件没有触发,有时当它离线时,应用程序崩溃了......</p>

<p>解决方案:
- 适当的权限标签必须紧跟在标签之后,在 AndroidManifest.xml 文件中......它可能看起来很荒谬,但否则事件不会触发。</p>

<p>最后,您的文件将如下所示:</p>

<pre><code>&lt;manifest android:hardwareAccelerated=&#34;true&#34; android:versionCode=&#34;10000&#34; android:versionName=&#34;1.0.0&#34; android:windowSoftInputMode=&#34;adjustPan&#34; package=&#34;br.com.burkard.app&#34; xmlns:android=&#34;http://schemas.android.com/apk/res/android&#34;&gt;
    &lt;uses-permission android:name=&#34;android.permission.ACCESS_NETWORK_STATE&#34; /&gt;
    &lt;supports-screens android:anyDensity=&#34;true&#34; android:largeScreens=&#34;true&#34; android:normalScreens=&#34;true&#34; android:resizeable=&#34;true&#34; android:smallScreens=&#34;true&#34; android:xlargeScreens=&#34;true&#34; /&gt;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 cordova 3.5.0 中未调用离线和在线事件,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/24935014/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/24935014/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 cordova 3.5.0 中未调用离线和在线事件