什么是android中最好的方法来检查互联网是否持续活跃(当互联网处于非活动状态时)?

时间:2017-01-02 16:27:36

标签: android android-networking

我正在构建一个Android应用程序,当互联网连接再次处于活动状态时通知用户。他/她必须在互联网不工作时启用该功能。做这个的最好方式是什么?目前我正在运行一个无限循环ping请求谷歌服务,但它没有继续几千个请求后。有没有更简单或更好的方法来实现这一目标?谢谢。

编辑: 大多数答案和参考仅在我的设备连接到Wifi时检查。但是,如果我的设备连接到我的路由器,但互联网连接不起作用怎么办?

3 个答案:

答案 0 :(得分:2)

我每次都使用广播检查连接。为连接信息创建一个类。

import android.content.Context;
import android.content.ContextWrapper;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;


public class ConnectivityStatus extends ContextWrapper{

    public ConnectivityStatus(Context base) {
        super(base);
    }

    public static boolean isConnected(Context context){

        ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo connection = manager.getActiveNetworkInfo();
        if (connection != null && connection.isConnectedOrConnecting()){
            return true;
        }
        return false;
    }
}

将代码应用到您的活动中:

 private BroadcastReceiver receiver = new BroadcastReceiver() {
 @Override
 public void onReceive(Context context, Intent intent) {
        if(!ConnectivityStatus.isConnected(getContext())){
            // no connection
        }else {
            // connected
        }
    }
 };

在您的活动的onCreate()方法中注册广播:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    your_activity_context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    ..
    ...
    ....
  }

不要忘记在活动周期中取消注册/注册:

@Override
protected void onResume() {
    super.onResume();
    your_activity_context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

}

@Override
protected void onPause() {
    super.onPause();
    your_activity_context.unregisterReceiver(receiver);

}

答案 1 :(得分:0)

您可以使用广播接收器连续检查互联网可用性。当互联网可用时,Receiver会通知您。

访问此页面,它可以帮助您 :Broadcast receiver for checking internet connection in android app

答案 2 :(得分:0)

为google.com创建一个简单的ping请求,并使用活动中的volley或其他网络库运行后台线程以保持ping。在响应时,检查网络响应代码。如果是服务器错误代码(5xx系列),那么您的互联网将无法使用。如果你得到OK代码(2xx系列),那么你有一个可用的互联网连接。对于这两种情况,请保持500 ms的重试延迟并继续收集网络可用性响应。

或者,使用Android网络管理器。这个类可以实现如下:

public class NetworkConnectivity {
    Context context;

    private Context _context;

    public NetworkConnectivity(Context context){
        this._context = context;
    }

    public boolean isNetworkConnected(){
        ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null)
        {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null)
                for (int i = 0; i < info.length; i++)
                    if (info[i].getState() == NetworkInfo.State.CONNECTED)
                    {
                        return true;
                    }

        }
        return false;
    }
}

从后台线程每隔500毫秒调用isNetworkConnected()并根据您对连接状态的了解,使用响应(对于连接为true,对于未连接为false)。