在Android中,最好的方法是连续检查互联网是否活动(当互联网不活动时)。

3 浏览
0 Comments

在Android中,最好的方法是连续检查互联网是否活动(当互联网不活动时)。

我正在开发一个Android应用程序,当网络连接恢复时通知用户。当网络不工作时,他/她必须启用此功能。如何做到最好?目前我在一个服务中运行一个无限循环的ping请求到谷歌,但是在发送几千个请求后它就停止了。有没有更简单或更好的方法来实现这个?谢谢。\n编辑:\n大多数答案和参考只检查我的设备是否连接到Wifi。但是如果我的设备连接到我的路由器,但是互联网连接不工作呢?

0
0 Comments

问题的原因是需要一个在Android中检查网络连接状态的方法,并且需要持续地检查(即使网络连接不可用)。

解决方法之一是创建一个简单的ping请求到google.com,并在activity中使用volley或其他网络库运行一个后台线程来持续ping。在收到响应时,检查网络响应代码。如果是服务器错误代码(5xx系列),则表示你的互联网连接不可用。如果收到OK代码(2xx系列),则表示你有一个可用的互联网连接。对于这两种情况,保持重试延迟为500毫秒,并继续收集网络可用性响应。

另一种方法是使用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表示未连接)进行操作。

0
0 Comments

在Android中,我们可以使用广播接收器(Broadcast Receiver)来持续检查网络是否可用。当网络可用时,接收器会通知您。

你可以访问这个网页,它会帮助你:Broadcast receiver for checking internet connection in android app

0
0 Comments

在Android中,检查网络连接的最佳方法是使用广播。可以创建一个连接信息的类,其中包含一个静态方法用于检查网络连接状态。以下是一个示例代码:

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

将上述代码应用到你的Activity中:

private BroadcastReceiver receiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        if(!ConnectivityStatus.isConnected(getContext())){
            // 没有网络连接
        }else {
            // 已连接网络
        }
    }
};

在Activity的`onCreate()`方法中注册广播接收器:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    your_activity_context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    // 其他初始化代码
}

不要忘记在Activity的生命周期中取消注册或重新注册广播接收器:

protected void onResume() {
    super.onResume();
    your_activity_context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
protected void onPause() {
    super.onPause();
    your_activity_context.unregisterReceiver(receiver);
}

通过以上方法,你可以在Android中持续地检查网络连接状态。

0