【问题标题】:How to check the Internet Connection periodically in whole application?如何在整个应用程序中定期检查 Internet 连接?
【发布时间】:2012-04-27 12:16:13
【问题描述】:

我正在做一个应用程序,它在整个应用程序中使用 Internet 连接。如果在使用应用程序时互联网连接丢失,应用程序将被强制关闭。为避免这种情况,如果互联网不可用,我想显示一条警报消息。我怎样才能做到这一点。 在登录时,我正在使用以下代码检查连接。但是我怎样才能在后台为整个应用程序做到这一点。

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

谢谢你..

【问题讨论】:

标签: android


【解决方案1】:

您应该创建一个BroadcastReceiver,当连接状态发生变化时将触发该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" />

下载源代码-here

【讨论】:

  • 嘿,您是否检查了另一个带有签名的 RegisterReceiver 方法(接收器、过滤器、广播权限、处理程序)?我的疑问是,如果您必须使用它来注册此接收器,您将使用什么“广播许可”?
  • 这个也是在应用外刷toast...如果我们只想实现应用内广播接收器呢????
  • @RishabhSrivastava 你必须在 Destroy 应用上取消注册Receiver 广播接收器
  • @ParagChauhan 我们如何知道我们连接到INTERNET 而不仅仅是网络?
  • @Roon13 是的,它只提供网络状态,但对于 Internet,您必须 ping 任何 url 并检查响应代码。
猜你喜欢
  • 1970-01-01
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多