我正在尝试弄清楚如何让我的应用程序定期检查设备是否连接到网络。我有以下用于网络检查的代码:
public class NetworkHelper {
private static final String TAG = "NetworkHelper";
public static boolean isDeviceConnectedToNetwork(Context context) {
boolean isConnected = false;
try {
ConnectivityManager cm = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
Log.d(TAG, "Checking network: " + isConnected);
return isConnected;
} catch (NullPointerException e) {
return false;
}
}
以及以下用于定期调用 NetworkHelper 的代码:
public class MQTTConnectionFragment extends Fragment {
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
networkCheckerThread = new HandlerThread("NetworkCheckerThread");
networkCheckerThread.start();
networkCheckerHandler = new Handler(networkCheckerThread.getLooper());
networkCheckerRunnable = () -> {
Log.d(TAG, "Running network check");
boolean isConnected = NetworkHelper.isDeviceConnectedToNetwork(getContext());
getActivity().runOnUiThread(() -> {
if (isConnected) {
connectionBox.setVisibility(View.VISIBLE);
disconnectButton.setVisibility(View.GONE);
loadingWheel.setVisibility(View.GONE);
noNetworkTextView.setVisibility(View.GONE);
} else {
connectionBox.setVisibility(View.GONE);
disconnectButton.setVisibility(View.GONE);
loadingWheel.setVisibility(View.GONE);
noNetworkTextView.setVisibility(View.VISIBLE);
}
networkCheckerHandler.postDelayed(networkCheckerRunnable,
isConnected ? 5000 : 3000);
});
};
networkCheckerHandler.postDelayed(networkCheckerRunnable, 200);
return view;
}
...
}
日志不断报告我始终有连接,即使我关闭 Wi-Fi 也是如此。 难道是因为我使用的是 AVD?或者是我的代码中我没有看到的东西? 我有一段时间无法使用物理设备,认为在 AVD 上进行测试就可以了。
尝试使用 BroadcastReceiver 监听网络连接变化。供参考android-listening-to-connectivity-changes-the- Correct-way