如何在整个应用程序中定期检查互联网连接?

14

我正在开发一个需要在整个应用程序中使用互联网连接的应用程序。如果在使用该应用程序时失去互联网连接,则应用程序将被强制关闭。为了避免这种情况,如果没有可用的互联网连接,我想显示一个警报消息。我该如何实现这一点?

在登录时,我正在使用以下代码检查网络连接。但如何在后台为整个应用程序执行此操作。

private boolean haveInternet(){
        NetworkInfo info = ((ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
        if (info==null || !info.isConnected()) {
                return false;
        }
        if (info.isRoaming()) {
                // here is the roaming option you can change it if you want to disable internet while roaming, just return false
                return true;
        }
        return true;
}

谢谢您...


@parag 你能给我展示一个例子吗? - wolverine
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/10603/discussion-between-parag-and-wolverine - Parag Chauhan
1个回答

42

您应该创建一个BroadcastReceiver,当连接状态更改时将触发它:

     public class BroadCastSampleActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.registerReceiver(this.mConnReceiver,
                new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    }
    private BroadcastReceiver mConnReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
            String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
            boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);

            NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            NetworkInfo otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);

            if(currentNetworkInfo.isConnected()){
                Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show();
            }else{
                Toast.makeText(getApplicationContext(), "Not Connected", Toast.LENGTH_LONG).show();
            }
        }
    };
}

然后在你的 AndroidManifest 中,你可以检查是否有网络连接:

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

下载源代码 - 这里


这个程序在应用外也会弹出提示,如果我们只想实现应用内的广播接收器怎么办? - Rishabh Srivastava
3
@RishabhSrivastava在销毁应用程序时需要取消注册广播接收器。 - Parag Chauhan
1
@ParagChauhan 我们如何知道我们连接到的是INTERNET而不仅仅是网络? - Roon13
如何在一定时间间隔后检查互联网连接? - Roon13
使用计时器可以实现这个。 - Parag Chauhan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接