我正在使用离子框架开发Android应用,需要检查互联网连接,但要稳定。例如,如果用户已登录但没有连接,我想显示消息或任何消息。我曾想过像
这样的东西
<div class="bar bar-subheader" id="alerta_no_internet" ng-show="!online">
<p>Not connected to Internet </p>
</div
他们不做的是任何服务,或者有什么东西要经常询问连接。
2 个答案:
答案 0 :(得分:1)
有几种方法可以解决这个问题:
- 您可以在服务器上存储资产(可能是
1px x 1px
GIF
图像)并不断对此进行轮询(每x
秒连续请求一次)。当然,您想确保此图像未缓存。如果请求失败,您可以认为网络不可用。这很容易实现,但效率不高,因为轮询会通过网络发送大量HTTP标头。
- 这样效率更高 - 在客户端和服务器中实现
WebSocket
连接,并在打开应用程序时打开套接字。如果套接字丢失,您可以显示Connectivity Lost
消息。这不需要重复发送HTTP请求。这样效率更高,但实现这一点需要更多的工作。
醇>
您可以在Ionic中为其中任何一个编写服务。
最简单的是,选项#1可以是:
setInterval(ajaxCall, 3000); //3000 MS == 3 sec
function ajaxCall() {
$.ajax('/testConnectivityUrl').then(function(response) {
console.log("Still connected");
}, function(err) {
console.log("Lost connection");
}
}
我使用过jQuery,但你可以使用vanilla JS或Angular或Ionic服务或工厂来做这件事。
答案 1 :(得分:1)
我对离子框架知之甚少,但Android框架中的ConnectivityManager确实会在连接变化时发出广播。您可以实现BroadcastReceiver来侦听这些更改:
&lt; receiver android:name =&#34; .ConnectivityReceiver&#34;&gt;
&LT;意图滤光器&gt;
&lt; action android:name =&#34; android.net.conn.CONNECTIVITY_CHANGE&#34; /&gt;
&LT; /意图滤光器&gt;
&LT; /接收机GT;
然后访问ConnectivityManager以监控网络状态:
公共类ConnectivityReceiver扩展BroadcastReceiver {
@覆盖
public void onReceive(Context context,Intent intent){
ConnectivityManager manager =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
// TODO:使用NetworkInfo监控状态
}
}
确保您在Manifest中声明了Internet和网络状态权限:
&lt; uses-permission android:name =&#34; android.permission.INTERNET&#34; /&gt;
&lt; uses-permission android:name =&#34; android.permission.ACCESS_NETWORK_STATE&#34; /&gt;
请注意,虽然连接变化可能很频繁,但是监控它们可能成本很高。根据最佳实践,您应该仅在需要时切换此接收器:
通常只需检查Internet连接即可
在开始更新之前,如果没有,则进一步暂停
更新,直到连接恢复。