在Android中,最好的方法是连续检查互联网是否活动(当互联网不活动时)。
问题的原因是需要一个在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表示未连接)进行操作。
在Android中,我们可以使用广播接收器(Broadcast Receiver)来持续检查网络是否可用。当网络可用时,接收器会通知您。
你可以访问这个网页,它会帮助你:Broadcast receiver for checking internet connection in android app
在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中持续地检查网络连接状态。